我有一个数组,我需要按顺序异步处理。如果其中一个失败了,我需要继续处理其余的,但我需要跟踪该错误,以便我可以在整个过程结束时做一些事情。
阅读documentation,看来此功能并未真正内置于eachSeries
。似乎我必须在每个任务上调用callback()
,表明它总是成功并且自己跟踪侧面的错误。这是对的吗?
答案 0 :(得分:3)
在这里自己跟踪错误并不一定是坏事:
var geocoder = CLGeocoder()
geocoder.geocodeAddressString(address) { (placemarks, error) -> Void in
if let placemark = placemarks![0] as? CLPlacemark {
print("place")
} else {
print("string")
}
}
即使出现错误也始终致电var errors = [];
async.eachSeries([1,2,3], function(data, cb) {
if(some_error_case) {
errors.push(data);
}
cb(null);
}, function(data) {
console.log('errors happened: ', errors);
});
,否则会过早停止循环。然后将任何错误推送到cb(null)
数组中,并在最后的回调中处理它们。
答案 1 :(得分:2)
与此同时,reflect
和reflectAll
已添加到 async ,以涵盖此方案。
示例(来自官方文档):
async.parallel([
async.reflect(function(callback) {
// do some stuff ...
callback(null, 'one');
}),
async.reflect(function(callback) {
// do some more stuff but error ...
callback('bad stuff happened');
}),
async.reflect(function(callback) {
// do some more stuff ...
callback(null, 'two');
})
],
// optional callback
function(err, results) {
// values
// results[0].value = 'one'
// results[1].error = 'bad stuff happened'
// results[2].value = 'two'
});
文档: