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
我希望这有帮助。