我自己的功能A和上传文件的第三方异步功能B,现在我想在执行A期间调用函数B,然后等待B函数结束。
我可以检查函数是否由标志var F完成,问题是如果我使用下面的代码,浏览器会进入无限循环(可能是因为它在循环中忙,无法更新F)。 / p>
function A(){
// ...
B();
while(F);
// ...
}
function B(){
// ...
}
我无法将功能A拆分为2个子功能
抱歉我的英语很差
答案 0 :(得分:0)
JavaScript
始终在一个线程中运行。这意味着,您无法进行繁忙的等待,或者您将阻止整个脚本。你应该使用一些异步编程。就像为B
函数提供回调或让B
函数返回承诺一样。
回调方法如下所示:
B(function(err, result) {
// some code after B completes
});
函数B
必须在完成后调用回调。
使用promises时,您的代码就像:
B().then(function(result) {
// result handling
},
function(err) {
// error handling
});
Promise非常方便,但需要使用某些第三方库,因为它们不是JS
的一部分。事实上,使用承诺可能会有所不同,具体取决于库(即jquery
和q
中的承诺)