首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJS async.parallel inside another async.parallel

NodeJS async.parallel inside another async.parallel
EN

Stack Overflow用户
提问于 2016-02-17 12:19:14
回答 1查看 695关注 0票数 0

在node.js中,我想把一个foreach async.parallel放在另一个里面。然而,我得到了“回调已调用”错误(请查看我代码上的注释)。我希望对外部的回调仅在内部完成后调用。我该怎么做呢?

代码语言:javascript
复制
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();
});
EN

回答 1

Stack Overflow用户

发布于 2016-02-17 14:19:23

使用bluebird promise

代码语言:javascript
复制
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();    
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35447878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档