我使用节点js异步模块,我想运行一堆并行函数。如果其中一个函数返回错误,我不希望立即执行主回调。我希望在任何情况下最后执行主回调,并且我想获得一个返回错误的项目数组,以及一系列正常的项目。没有额外的逻辑,这一切都可能吗?
答案 0 :(得分:0)
尝试查看Javascript Promise对象。
让所有并行函数返回一个promise对象,将它们全部放入一个数组中。 然后,做Promise.all([promises])。然后(回调); 除非你的函数抛出异常,否则你可以保证只有在执行所有函数后才调用回调。
答案 1 :(得分:0)
不是在该函数的回调中返回错误,只需将错误推送到错误数组,将ok项推送到ok数组,并使用null作为所有函数的第一个参数(callback(null))调用回调。像这样:
var okArray = [];
var errorArray = [];
async.parallel([
function(callback) {
// do something
if (error) {
errorArray.push(errorItem);
} else {
okArray.push(okItem);
}
callback(null);
},
function(callback) {
// do something
if (error) {
errorArray.push(errorItem);
} else {
okArray.push(okItem);
}
callback(null);
}
], function(err) {
console.log(okArray);
console.log(errorArray);
});
如果您不介意并行调用中的成功/失败函数只有1个数组,则parallel会按照数组中列出的顺序为每个函数返回一个结果数组。例如:
async.parallel([
function(callback) {
// do something
if (error) {
return callback(null, errorItem);
}
callback(null, okItem);
},
function(callback) {
// do something
if (error) {
return callback(null, errorItem);
}
callback(null, okItem);
}
], function(err, results) {
console.log(results); // results[0] = what 1st function returns
// results[1] = what 2nd function returns
});