嵌套的异步函数

时间:2017-03-15 10:55:38

标签: javascript callback async.js

使用以下代码,我可以确定最后一个回调将返回更新的变量吗?

var a = 0;
async.forEach(collectionarray, function(item, cb1) {
    async.forEach(collection.anotherarray, function(item, cb2) {
        a += item.number;
        cb2();
    }, function(err) {
        if(err) console.log(err);
    })
    cb1();
}, function(err) {
    if(err) console.log(err);
    console.log(a); // will this be updated for all the collection.anotherarray.number ?
})

1 个答案:

答案 0 :(得分:0)

.forEach的第三个参数有双重用途:作为所有迭代完成时的回调,或报告错误。在内部cb1()上的回调中调用.forEach

var a = 0;
async.forEach(collectionarray, function(item, cb1) {
    async.forEach(collection.anotherarray, function(item, cb2) {
        a += item.number;
        cb2();
    }, function(err) {
        if(err) console.log(err);
        cb1();
    });
}, function(err) {
    if(err) console.log(err);
    console.log(a);
})

您编写的方法几乎肯定无法正常工作。外部.forEach将认为它很快就完成了。