Async.map – 使其忽略错误,并处理整个列表

我必须使用asynchronous处理数组

var arr = [1,2,3,4]; Async.map(arr, iterator, callback); 

我无法控制的iterator函数会抛出所有值的错误,比如4

 function iterator(val, cb) { console.debug('processing', val); if (val == 4) cb(); else cb(new Error(val)); } 

asynchronous会做什么

如果iterator将错误传递给callback函数,则主callback函数(对于map函数)立即被调用并返回错误。

所以我明白了

 processing 1 [Error: 1] processing 2 processing 3 processing 4 

我想要的是它不应该立即调用带有错误的callback函数,而是等待它处理整个列表,然后调用callback函数。

这可能吗? 还是有一种替代Async.map这样的行为?

如果迭代器将错误传递给callback函数,则主callback函数(对于映射函数)立即被调用并返回错误

https://github.com/caolan/async#map

您可以将空值传回给callback,而不是错误。

 function iterator(cb, trans) { try { // something cb(null, transformed); } catch (ex) { // log the error perhaps cb(null, null); } } 

既然你不能控制迭代器,你可以写一个包装器。

假设他们的迭代器被称为their_iterator

 function my_iterator(cb, trans) { var my_cb = function(their_err, their_trans) { if (their_err) { // log error cb(null, null); } else { cb(null, their_trans); } } their_iterator(my_cb, trans); } Async.map(arr, my_iterator, callback); 

我有一个类似的问题,我的迭代器会发送空值到我的数组,所以我使用async.mapLimit函数。

mapLimit(coll, limit, iteratee, callback)

看到:

https://caolan.github.io/async/docs.html

我希望这有帮助。