繁体   English   中英

async.each内部的async.waterfall不起作用吗?

[英]async.waterfall inside async.each doesn't work?

我正在尝试对一系列项目运行async.each。

对于每个项目,我要运行async.waterfall。 请参见下面的代码。

var ids = [1, 2];

async.each(ids, 

    function (id, callback) {

        console.log('running waterfall...');

        async.waterfall([

            function (next) {

                console.log('running waterfall function 1...');

                next();
            },

            function (next) {

                console.log('running waterfall function 2...');

                next();
            }],

            function (err) {

                if (err) {
                    console.error(err);
                }
                else {
                    console.log('waterfall completed successfully!');
                }

                callback();
            });
    }, 

    function (err) {

        if (err) {
            console.error(err);
        }
        else {
            console.log('each completed successfully!');
        }

    });

return;

此代码的输出如下所示:

running waterfall...
running waterfall function 1...
running waterfall...
running waterfall function 1...
running waterfall function 2...
running waterfall function 2...
waterfall completed successfully!
waterfall completed successfully!
each completed successfully!

但是我的意图是,我的理解是输出应如下所示:

running waterfall...
running waterfall function 1...
running waterfall function 2...
waterfall completed successfully!
running waterfall...
running waterfall function 1...
running waterfall function 2...
waterfall completed successfully!
each completed successfully!

我一直在检查代码,不知道出了什么问题,有人知道我的代码或对异步方法应该做什么的期望不正确吗?

谢谢!

async.each()尝试并行运行循环的所有迭代,因此所有迭代可能会同时进行,并且将以不确定的顺序完成。 您可以在.each()文档中清楚地看到这一点:

将函数iteratee并行应用于arr中的每个项目。 调用iteratee时将使用列表中的一个项目,并在完成时进行回调。 如果iteratee将错误传递给其回调,则立即使用错误调用主回调(针对每个函数)。

请注意,由于此函数并行地将iteratee应用于每个项目,因此不能保证iteratee功能将按顺序完成。

因此,这解释了为什么两个.waterfall()迭代都同时进行而不是.waterfall()运行。

如果要一个接一个地运行它们,则应该改用async.eachSeries()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM