节点js应用程序中的async.js问题

时间:2015-04-07 07:54:38

标签: javascript node.js asynchronous

我有2个嵌套的async.each。他们看起来像:

 async.each(result, function(row, callbackrow) {
   tot = 0;
   console.log('UID:', row.uid);

   async.each(row.vbs, function(vb, callback){
     checkInteractions(row.uid, vb.vbNID, function(data){
       console.log(data);
       callback();
     });
   }, function(err){ console.log('done 1'); });

   callbackrow();  
}, function(err){ console.log("done all"); });

我的问题是,checkinteraction异步调用会导致问题。没有它,每个第一个异步中的每一个都会从第二个调用控制台日志。有了它,我得到了完成所有消息,并且在嵌套(第二)异步之后每个都执行它的代码。我需要它像一个for for的同步调用。对于first for的每个元素,第二个要在步进到第一个for中的下一个索引之前执行。

1 个答案:

答案 0 :(得分:1)

我认为callbackrow应该作为内部循环的最终回调传递,以便外部循环知道何时进入下一次迭代,如下所示:

async.each(result, function(row, callbackrow) {
  tot = 0;
  console.log('UID:', row.uid);

  async.each(row.vbs, function(vb, callback){
    checkInteractions(row.uid, vb.vbNID, function(data){
      console.log(data);
      callback();
    });
  }, function(err){ 
    console.log('done 1'); 
    callbackrow();
  });

}, function(err){ console.log("done all"); });