2015-10-12 41 views
0

我有一个html文件,其中包含2个js。该first.js具有的getJSON呼叫和如以下回调函数,以它:Javascript - 在回调完成前执行下一行

finalResult = "" 
callbackfunction = function(result){ 
    finalResult = some manipulation with result 
} 
getJSON (url, callbackfunction) 

的second.js使用数据“finalResult” first.js的。类似下面:

ultimateResult = some manipulation with finalResult 

问题:该生产线是调用回调函数之前ultimateResult被执行,因此second.js总是读finalResult为空值。

我尝试设置ajax asynch变量为false之前进行json调用 - > Dint帮助 我试图包括first.js脚本在second.js执行它在最终脚本行前 - > Dint帮助 我无法在first.js的回调中包含second.js ultimateResult脚本 - >这不是我的选项

我可以在性能上妥协,其中ultimateResult可以等待回调完成,但我不确定我如何实现它。程序循环,如果我尝试使用一些标志,而条件(当然)。

谢谢!

+0

从回调中调用ultimateResult? – user2182349

+0

感谢您的回复。不幸的是,这不是我的选择,我在描述中提到了这一点:) –

回答

0

所以,你必须:

HTML:

<script src="first.js"></script> 
<script src="second.js"></script> 

first.js:

var finalResult = ''; 
var callBackFunction = function(result) { 
    finalResult = codeManipulation(); 
} 
getJson(url, callBackFunction); 

second.js:

function ultimateResult(result) { 
    console.log(result); 
} 
ultimateResult(finalResult); 

//OUTPUTS EMPTY STRING 
  • 你可以使用promise而不是回调。这是推荐的方法
  • 当返回值为ultimateResult的值时,您可以触发事件
  • 您可以初步将finalResult的值设置为undefined,并检查值一个递归循环直到它被定义。
  • 非常糟糕的想法,不要这样做:放一个超时调用ultimateResult。这很糟糕,因为如果在API之前回调你正在浪费时间。当调用需要比预期更长的时间时,情况会更糟,因为如果在被调用时没有返回值,该值将作为空字符串返回。
相关问题