【问题标题】:NodeJS async.parallel inside another async.parallel另一个 async.parallel 中的 NodeJS async.parallel
【发布时间】:2016-05-28 15:16:26
【问题描述】:

在 node.js 中,我想要一个 foreach async.parallel 在另一个里面。但是我收到“回调已被调用”错误(查看我的代码的注释)。我希望仅在内部完成后调用外部回调。我该怎么做?

async = require("async");

var asyncTasks = [];
var items = [];
/* push elements to items */

items.forEach(function(item){  
  var asyncTasks2 = [];
  var items2 = [];
  asyncTasks.push(function(callback2){
    item.someAsyncCall(function(){
       /* push elements to items2 */
       items2.forEach(function(item2){  
          item2.someAsyncCall(function(){
            callback2();          
          })
       }
       asyncTasks2.push(function(callback2){
         setTimeout(function(){
           callback2();
         }, 100000);
       });
       async.parallel(asyncTasks2, function(){
          // All tasks are done now
          doSomethingOnceAllAreDone();
          callback(); // callback was already called
        });
    });
  });
});


asyncTasks.push(function(callback){
  setTimeout(function(){
    callback();
  }, 100000);
});

async.parallel(asyncTasks, function(){
  // All tasks are done now
  doSomethingOnceAllAreDone();
});

【问题讨论】:

标签: node.js asynchronous


【解决方案1】:

使用bluebird promise

var Promise = require('bluebird');
var items = [];
return Promise.map(items, function(item){
    var items2 = [];
    return Promise.map(items2, function(item2){
        return item2.someAsyncCall();
    })
    .then(function(){
        return doSomethingOnceItems2AreDone();        
    }); 
})
.then(function(){
    return doSomethingOnceItems1AreDone();    
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-03
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 2013-01-20
    • 2016-10-07
    • 1970-01-01
    相关资源
    最近更新 更多