使用参数错误在async.mapLimit中分隔失败的进程

时间:2016-05-27 05:20:08

标签: javascript node.js

我正在使用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回调的参数错误访问。

提前致谢:)。

1 个答案:

答案 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) {
  ...
});