2016-02-17 3 views
0

В node.js, я хочу иметь один foreach async.parallel внутри другого. Однако я получил ошибку «callback уже был вызван» (посмотрите на комментарий к моему коду). Я хочу, чтобы обратный вызов внешнего вызова вызывался после завершения внутренней операции. Как я могу это сделать?NodeJS async.parallel внутри другого 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(); 
}); 
+0

Read http://stackoverflow.com/questions/25712767/nesting-node-async-eachseries –

ответ

0

использование 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();  
}); 
Смежные вопросы