具有异步调用的同步循环

时间:2015-02-17 15:09:51

标签: javascript node.js asynchronous es6-promise

这就是我需要完成的事情:

我有一个返回承诺的函数(我们称之为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的结果低于定义的数量时,我才需要使用下一组参数运行promise。

我尝试使用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
});

1 个答案:

答案 0 :(得分:3)

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

  

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

通过这种方式,您可以实现异步调用的同步迭代