【问题标题】:async.waterfall like alternative for async.eachSeriesasync.waterfall 类似于 async.eachSeries 的替代方案
【发布时间】:2015-04-07 23:43:10
【问题描述】:

我必须在 node.js 中编写一些代码 sn-p,我需要使用 async.js 控制异步流。 async.js 中有一个名为 async.waterfall 的函数,它提供了将一些值传递给下一个执行函数的机会。我的问题是我必须运行async.eachSeries 来控制数组上的流,但我找不到任何选项来传递像瀑布这样的值。有吗?

【问题讨论】:

    标签: node.js async.js


    【解决方案1】:

    async.eachSeries() 没有传递值的选项,但您可以使用闭包来保存下一次迭代的值。例如:

    var async = require('async');
    
    (function() {
      var lastValue = 1;
    
      async.eachSeries([1, 2, 3, 4, 5], function (item, eachCb) {
        console.log('item ' + item + ', last value: ' + lastValue);
        lastValue = lastValue + item;
        eachCb(null);
      }, function (err) {
        console.log('done:' + lastValue);
      });
    })();
    

    输出将是:

    item 1, last value: 1
    item 2, last value: 2
    item 3, last value: 4
    item 4, last value: 7
    item 5, last value: 11
    done: 16
    

    正如您在输出中看到的,当前迭代正在使用上次迭代的保存值。

    【讨论】:

    • 其实我想避免全局状态。没有全局状态变量有什么办法吗?
    • 如果库调用不允许,我不知道如何使用闭包。在这种情况下,它是全局的,但在此模块内。您甚至可以在函数中进行环绕,使其只是函数的变量。我会修改我的答案。
    猜你喜欢
    • 2021-12-05
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 2016-06-03
    • 2012-03-09
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多