Javascript - 在回叫完成之前执行下一行

时间:2015-10-12 02:09:22

标签: callback

我有一个html文件,其中包含2个js。 first.js有一个getJSON调用和一个回调函数,如下所示:

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

second.js正在使用first.js的数据'finalResult'。如下所示:

ultimateResult = some manipulation with finalResult

问题:在调用回调函数之前执行ultimateResult行,因此second.js总是将finalResult读作空白值。

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

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

谢谢!

1 个答案:

答案 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
  • 您可以使用promises而不是回调。这是推荐的方法
  • 您可以在返回ultimateResult正在观看
  • 的值时触发事件
  • 您最初可以将finalResult的值设置为undefined,并在递归循环中检查该值,直到定义它为止。
  • 非常糟糕的想法,不要这样做:在调用ultimateResult时超时。这很糟糕,因为如果在API之前调用回来你就是在浪费时间。当调用花费的时间超过预期时会更糟糕,因为如果它在调用时没有返回,则值将返回为空字符串。