2

这是我需要完成的:

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

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

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

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

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
});
4

1 回答 1

3

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

与each相同,仅将迭代器应用于 arr 中的每个项目。仅在当前迭代器完成后才调用下一个迭代器。这意味着迭代器函数将按顺序完成。

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

于 2015-02-17T15:14:57.323 回答