javascript - for 循环在回调完成之前退出

标签 javascript asynchronous callback bluebird

我有一个调用异步函数的 for 循环。我需要这个函数在 for 循环结束时调用回调,但前提是所有异步函数都返回了结果。我已经尝试过:

for(var i = 0; i < vaccinsCount; i++){
    getVaccinAddress(i, address, provider, function(result){
       if(result.success){
         console.log("result:" + result.values);
         vaccines.push(result.values);
       } else {
         callback({success: false, message: result.message}); 
       }
   });
}
callback({success: true, values: vaccines}); 

相反,代码进入 for 循环,然后调用异步函数,然后直接退出。我该如何解决这个问题?

getVaccinAddress 是执行服务器调用的异步函数。

编辑

我正在使用 NodeJS,因此解决方案是使用 bluebird,但是我不知道如何使用 bluebird 实现它。

最佳答案

我强烈建议在这种情况下使用 promise 。 这是管理异步调用的好方法: https://davidwalsh.name/promises

如果您使用 promise ,您的代码将如下所示:

var promises = []
for(var i = 0; i < vaccinsCount; i++){
    promises.push(getVaccinAddress(i, address, provider));
    // getVaccinAddress will need to return a promise
}

Promise.all(promises).then(function(result) {
   console.log('success');
})
.catch(function(err) {
   console.log(err);
});

关于javascript - for 循环在回调完成之前退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42614371/

相关文章:

node.js - Node 异步与同步

javascript - 异步类型错误 : cb is not a function

javascript - 使用带有一个附加参数的函数的 map() 的 JS 回调

c# - 使用回调检查鼠标指针状态

javascript - jquery 将对象从底部移动到顶部

javascript - 如何在javascript中为按钮添加标题

javascript - 附加时将 JSON 扁平化为字符串数组

javascript - IE7 将两个按钮保持在同一行的问题

javascript - 如何从异步调用返回响应?

multithreading - 比较函数和多线程