我必须用async处理一个数组
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));
}
异步会做的是
如果
iterator
将错误传递给他的回调,则立即调用主callback
(用于map
函数)并显示错误。所以我得到
processing 1
[Error: 1]
processing 2
processing 3
processing 4
我想要的是它不应立即因错误而调用
callback
,而是要等到它处理整个列表(无论如何都会这样做),然后才调用callback
。这可能吗?还是有Async.map的替代品以这种方式运行?
最佳答案
如果迭代器将错误传递给他的回调,则主回调(用于map函数)将立即错误调用
https://github.com/caolan/async#map
您可以改为将null值传递回回调,而不会出错。
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);
关于javascript - Async.map-使它忽略错误,并处理整个列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29598970/