【问题标题】:Synchronous loop with async calls带有异步调用的同步循环
【发布时间】:2015-04-18 07:55:30
【问题描述】:

这是我需要完成的:

我有一个返回承诺的函数(我们称之为thePromise)。

我有一个包含不同参数的数组来运行thePromise。 示例:

var thePromise = function(options) {
   return new Promise(function(resolve, reject) {
     // Some asynchronous code
     resolve(value);
   });
}

var parameters = [
  { a: 10, b: 15 },
  { a: 20, b: 30 }
];

我将解析的value 加到一个变量中,我们称之为total。

这是我卡住的地方: 只有当 promise 的结果总和为 total 低于定义的数量时,我才需要使用下一组参数运行 promise。

我尝试使用async.each(),但这不起作用,因为在我调用next() 函数之前调用了下一个promise。

当前(不工作)解决方案:

async.each(paramaters, function(options, next) {
   thePromise(options).then(function(value) {
      total += value;

      if (total > 10) {
        return next('limited');
      }
      next();
   }).catch(next);
}, function(err) {
  if (err && err !== 'limited) { // Handle error }

  // Handle success
});

【问题讨论】:

  • 尝试添加用于迭代参数的函数调用。
  • @Bogdan.Nourescu 完成

标签: javascript node.js asynchronous es6-promise


【解决方案1】:

您需要使用文档中的async.eachSeries:

和each一样,只是对arr中的每一项都应用了迭代器。仅在当前迭代器完成后才调用下一个迭代器。这意味着迭代器函数将按顺序完成。

这样您就可以实现异步调用的同步迭代

【讨论】:

  • 我现在觉得自己好蠢。我已经有了解决方案。谢谢。
猜你喜欢
  • 2019-02-15
  • 2018-03-09
  • 1970-01-01
  • 2018-12-10
  • 2013-10-20
  • 2017-07-07
  • 2018-10-17
  • 2017-07-18
  • 2021-11-24
相关资源
最近更新 更多