我正在使用async.mapLimit对限制为10的数组进行一些并发过程:
async.mapLimit(files, 10, function(file, callback) {
... etc...
}, function(error, files) {
... etc..
});
在main函数中,我正在使用child_process执行异步操作,如果一切都按原样发生,我只需调用回调:
callback(null, files);
但是...当发生不好的事情时,我也需要调用传递文件的回调,因为我不希望结束所有内容,我只是为文件分配一个错误属性并调用回调:
file.error = error;
callback(null, file);
因此,当第二个async.mapLimit回调被触发时,我有一个文件数组:
, function(error, files) {
console.log(files);
});
输出:
[
{
name: 'file_2',
error: 'something'...
},
{
name: 'file_1',
...etc
}
]
所以,我需要将失败的文件分开,执行:
var failedFiles = [];
var okFiles = [];
files.forEach(function(file) {
if (file.error)
failedFiles.push(file);
else
okFiles.push(file;
});
我想知道是否无法返回作为数组失败的文件,然后通过第二个async.mapLimit回调的参数错误访问。
提前致谢:)。
答案 0 :(得分:0)
async.mapLimit()
将立即停止。错误,因此无法做你想做的事。
作为替代方案,您可以使用async.mapLimit()
而不是使用async.eachLimit()
,并将文件对象推送到迭代器函数内的相应数组中:
var failedFiles = [];
var okFiles = [];
async.eachLimit(files, 10, function(file, callback) {
if (SOME_ERROR) {
failedFiles.push(file);
} else {
okFiles.push(file);
}
callback();
}, function(err) {
...
});