在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();
});发布于 2016-02-17 14:19:23
使用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();
});https://stackoverflow.com/questions/35447878
复制相似问题