【问题标题】:node.js async for loopnode.js 异步 for 循环
【发布时间】:2015-04-11 09:39:44
【问题描述】:

我的场景:

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

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

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

我的问题是对于第一次迭代,“client.search(query)”在完成这些东西之前执行,第二次迭代开始了,因为client.search(query) 是通过回调执行的。我必须首先将所有结果推送到一个数组中。

所以在我得到第一个结果之前,第二个被附加,有时我什至没有得到第一个结果。

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

【问题讨论】:

标签: javascript node.js


【解决方案1】:

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

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

【讨论】:

  • 它不是 mongodb 连接行。实际上它只是一个数组..请参阅我编辑的帖子..
  • 那你能为此做一个小提琴吗?
【解决方案2】:

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

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
      }

     });  

});

【讨论】:

    猜你喜欢
    • 2014-02-06
    • 2021-10-18
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多