【问题标题】:How to execute asynchronous functions in a loop using Q.js如何使用 Q.js 在循环中执行异步函数
【发布时间】:2013-10-17 04:50:46
【问题描述】:

我需要在循环中执行一个异步函数(使用不同的参数)。任何想法如何使用 Node.js 中的 Q 模块来完成。 下面是一个例子:-

function addAsync(a, b) {
    var deferred = q.defer();
    // Wait 2 seconds and then add a + b
    setTimeout(function() {
        deferred.resolve(a + b);
    }, 2000);
    return deferred.promise;
}

Q.all 可以使用(),但它是并行运行的。由于项目要求,我基本上需要按顺序执行它们。

【问题讨论】:

    标签: javascript node.js asynchronous q


    【解决方案1】:

    如果您不必坚持使用 Q.js,我建议您查看 async

    Async 是一个流行的异步流控制库,它提供了大量有用的函数,包括像 serieswaterfall 这样的函数,它们完全可以满足您的需要。谢谢:)

    【讨论】:

      【解决方案2】:

      你有很多选择,但这应该会让你感动:

      parameters.reduce(function (results, parameters) {
          return results.then(function () {
              return addAsync(parameters[0], parameters[1])
              .then(function (result) {
                  results.push(result);
                  return results;
              })
          });
      }, Q([]))
      .then(function (results) {
          // ...
      })
      .done()
      

      我在 Q-IO https://github.com/kriskowal/q-io/pull/57 中有一个更有趣的解决方案@

      Reader(parameters)
      .map(function (parameters) {
          return addAsync(parameters[0], parameters[1])
      }, null, 1)
      .all()
      .then(function (results) {
          // ...
      })
      

      1 是并行限制器。

      【讨论】:

        猜你喜欢
        • 2018-06-26
        • 1970-01-01
        • 2014-04-10
        • 2013-09-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多