Async.js eachSeries没有停止错误

时间:2015-11-17 21:05:16

标签: javascript asynchronous

我有一个数组,我需要按顺序异步处理。如果其中一个失败了,我需要继续处理其余的,但我需要跟踪该错误,以便我可以在整个过程结束时做一些事情。

阅读documentation,看来此功能并未真正内置于eachSeries。似乎我必须在每个任务上调用callback(),表明它总是成功并且自己跟踪侧面的错误。这是对的吗?

2 个答案:

答案 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)

与此同时,reflectreflectAll已添加到 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'
});

文档:

Async Reflect