首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >async.waterfall‘t async.each不工作吗?

async.waterfall‘t async.each不工作吗?
EN

Stack Overflow用户
提问于 2016-03-16 00:58:50
回答 1查看 1.8K关注 0票数 3

我试图在一个项目数组上运行一个async.each。

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

代码语言:javascript
复制
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;

此代码的输出如下所示:

代码语言:javascript
复制
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!

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

代码语言:javascript
复制
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!

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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-16 01:07:42

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

并行地将函数迭代应用于arr中的每个项。迭代器将使用列表中的项进行调用,并在它完成时调用回调。如果迭代器将错误传递给其回调,则主回调(用于每个函数)将立即与错误一起调用。 注意,由于此函数并行地将iteratee应用于每个项,因此不能保证iteratee函数按顺序完成。

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

如果您想一个接一个地运行它们,那么您应该使用async.eachSeries()

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36025014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档