任何人都可以解释以下控制台日志的打印顺序吗?我正在使用异步版本 1.4.23 。
响应包含两项。
输出:标签1
标签2
标签2
标签4
标签3
标签 3
async.parallel([
function(callback){
detailsData.list({}, function(err, response) {
if (!err) {
console.log("label 1");
async.each(response, function(item, cb) {
console.log("label 2");
itemList.getData(item, function(err, response) {
console.log("label 3");
}
cb(err);
});
});
}
callback(err);
});
},
function (callback) {
somefunction();
}], function (err) {
console.log("label 4");
}
为什么标签 3 没有在标签 4 之前打印?
最佳答案
您必须将从 async.parallel
获得的 callback
传递给 async.each
,而不是立即调用它,否则并行执行不会等待每个。
async.parallel([
function(callback){
detailsData.list({}, function(err, response) {
if (err) return callback(err); // <- still call it when you're not going for the each
console.log("label 1");
async.each(response, function(item, cb) {
console.log("label 2");
itemList.getData(item, function(err, response) {
console.log("label 3");
cb(err, response);
});
}, callback);
// ^^^^^^^^
});
},
function(callback) {
somefunction();
callback();
}
], function(err) {
console.log("label 4");
});
关于javascript - async.each 内的异步函数不会被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33593534/