【问题标题】:async.js : async.eachSeries result always throw undefinedasync.js : async.eachSeries 结果总是抛出 undefined
【发布时间】:2015-12-02 17:40:03
【问题描述】:

我的代码有问题吗?我使用async.eachSeries,但结果总是抛出未定义。

这是我的代码:

async.eachSeries([1,2,3], function(data, cb) {
    setTimeout(function() {
        cb(null, data+1);
    }, 1000);
}, function(err, result) {
    console.log(err, result);
});

我的日志返回:null,未定义而不是 null[2,3,4]

谢谢...对不起我糟糕的英语XD

【问题讨论】:

    标签: javascript async.js


    【解决方案1】:

    第二个参数在迭代完成时调用,使用eachSeries(),它只需要一个参数err。如果你想要result,你必须使用mapSeries

    async.mapSeries([1, 2, 3],
        function (data, cb) {
            setTimeout(function () {
                cb(null, data + 1);
            }, 1000);
        },
        function (err, result) {
            console.log(result);
        }
    );
    

    【讨论】:

    • 谢谢...我刚刚注意到...每个系列都没有结果参数 XD
    【解决方案2】:

    您也可以将结果形式与 eachSeries() 一起使用:

    var result = [];
    async.eachSeries([1,2,3], function(data, cb) {
        setTimeout(function() {
            result.push(data+1);
            cb(null);
        }, 1000);
    }, function(err) {
        console.log(err, result);
    });
    

    应该可以,虽然我目前无法自己测试。

    【讨论】:

    • mapSeries 适用于此案例。
    • 是的...这种方法有点棘手但有效...我测试了它..但我想我会使用@ShanShan 方法。谢谢你的回答顺便说一句XD
    • 我知道@ShanShan,只是想我会使用 OPs 方法提供答案。 :)
    猜你喜欢
    • 1970-01-01
    • 2016-05-21
    • 2016-12-10
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多