【问题标题】:How to run a variable series or javascript functions in node.js using async?如何使用异步在 node.js 中运行变量系列或 javascript 函数?
【发布时间】:2012-09-14 19:10:56
【问题描述】:

我在 Node.js 中使用 async。当我有固定数量的函数要执行时,它运行良好:

async.series([ 
    function(cb) { ...one ... },
    function(cb) { .. two ... },
], function(err, res) {
    ...done
});

但现在我需要执行任意数量的函数,具体取决于一个数组中的值,并且不知道如何传递数组元素:

var values = [1, 2, 3, ... ];
var calls = [];
for (var i = 0; i < values.length; i++) {
    calls.push(function(cb) { 

        HOW TO PASS values[i] HERE? 

    });
}
async.series(calls, function(err, res) {
    ...done
});

【问题讨论】:

    标签: javascript node.js asynchronous


    【解决方案1】:

    这只是常见的 async-in-a-loop 问题。您将需要一个 i 值的闭包,其中声明了推送的函数表达式。这可以使用 IEFE 作为循环体来完成,或者使用 .forEach().map() 更容易:

     var calls = values.map(function closure(val, i) {
         return function(cb) {
             // use val and i here, which are bound to this execution of closure
         };
     });
    

    【讨论】:

      【解决方案2】:

      你应该可以使用闭包:

      var values = [1, 2, 3, ... ];
      var calls = [];
      for (var i = 0; i < values.length; i++) {
          calls.push((function(index) {
              return function(cb) {       
                  // use values[index] here
              };
          })(i));
      }
      async.series(calls, function(err, res) {
          ...done
      });
      

      【讨论】:

      • 正是我需要的。谢谢。
      猜你喜欢
      • 2014-02-12
      • 1970-01-01
      • 2017-12-20
      • 2020-11-15
      • 2018-01-16
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多