这就是我需要完成的事情:
我有一个返回承诺的函数(我们称之为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
});
答案 0 :(得分:3)
您需要使用文档中的async.eachSeries:
与each相同,只有迭代器应用于arr中的每个项目。只有当前的迭代器完成后才会调用下一个迭代器。这意味着迭代器函数将按顺序完成。
通过这种方式,您可以实现异步调用的同步迭代