node.js async for loop

时间:2015-02-11 05:29:23

标签: javascript node.js

我的情景:

在forEach循环中,我执行了一个带回调的函数,如下所示:

var rows = [];
rows.forEach(function(elem, i){
///done some stuff

     client.search(query).then(function(facResult){
     //done some stuff         
     });    
});

我的问题是第一次迭代" client.search(查询)"在完成这个东西之前执行第二次迭代,因为client.search(query)是用回调执行的。我必须先将所有结果推送到数组中。

所以在我获得第一个结果之前,第二个是附加的,有时我甚至没有得到第一个结果。

我必须按顺序执行for循环。我搜索了很多,一些建议是使用timedelay,但我并不需要。{1}}。帮我解决这个问题。提前谢谢。

2 个答案:

答案 0 :(得分:0)

由于使用'forEach',您遇到了竞争条件问题。不是将所有行都放入'行',而是使用'光标'。

您可以看到以下与您的用例类似的实现答案: https://stackoverflow.com/a/18119789/802651

答案 1 :(得分:0)

我使用了异步库,如下所示:

async.forEach(myVar.rows, function (elem, next){ 

    client.search(query).then(function(facResult){
     //done some stuff      
      if(--myVar.rows.length == 0){
          loop finishes //done some stuff
      }

     });  

});