在循环中使用异步函数并仅在循环完成后调用回调

时间:2017-01-17 07:31:37

标签: javascript asynchronous syntax callback

我正在尝试编写一个在循环中调用异步函数的函数,并且只有在循环结束时,才能使用结果调用回调函数。

这样的事情:

function foo(cb){
    var result;
    for(var i=0; i < 999; i++){
        asyncFunction(i, function(val){
            do something with result
        });
    }
    cb(result);
}

但我发现它在cb(result);实际完成从asyncFunction次调用中返回之前就已到达cb

在调用META-INF之前,可以做些什么让它等待完成循环?承诺有帮助吗?

2 个答案:

答案 0 :(得分:1)

异步库具有您需要的所有功能:http://caolan.github.io/async/

答案 1 :(得分:1)

也许这会对你有所帮助:

function asyncFunction (callback) {
  // Do stuff
  return callback()
}

function foo () {
  var result = 0
  for (var i = 0; i < 999;) {
    asyncFunction(function () {
      i++
      result += i
    })
  }
  console.log(result)
}

foo()