循环forEach中的异步函数

时间:2017-06-30 09:14:24

标签: javascript loops asynchronous

我的循环中有一个闭包的问题。我在这做什么:

this.newResults.cyclists.forEach(function(cyclist){
   that.calcUsersScore( that.usersScoresByLigue,cyclist,bonus );

   bonus--;

   if(bonus === 0) {
      console.log("c'est terminé");
      that.addUsersScore( that.usersScoresByLigue );
   }
});

所以我想执行我的函数addUsersScore(),其变量usersScoreByLigue由先前函数calcUsersScore();更新。

我的问题是这个函数calcUsersScore()执行起来很长(一些请求带有数据库和多个测试)所以如何等待它并确保addUsersScore()之后发生了什么?

提前致谢,

1 个答案:

答案 0 :(得分:0)

如果您可以修改that.calcUsersScore的代码,可以在完成其他内容后使用callBack:

calcUsersScore: function( usersScoresByLigue, cyclist, bonus, callback) {
  //do whatever it does allready
  // on handler of the server response call the callback
  xhr.onreadystatechange = function() {
     if(xhr.readyState == 4 && xhr.status == 200) {
        callback && callback();
     }
   } 
}

您的代码可以成为:

 this.newResults.cyclists.forEach(function(cyclist){
    that.calcUsersScore( that.usersScoresByLigue, cyclist, bonus, function(){
       bonus--;
       if(bonus === 0) {
         console.log("c'est terminé");
        that.addUsersScore( that.usersScoresByLigue );
       }
    });
 });