Javascript/Angularjs : 等待 promise 完成,然后再进入 foreach 循环中的下一次迭代
Javascript/Angularjs : wait for promise to be fulfilled before going to the next iteration in foreach Loop
很确定我在这里漏掉了一些小东西。我在对象数组上应用 javascript foreach 循环。通过循环,我正在对 api 进行异步调用以更新数据。我想要的是 foreach 循环在继续下一次迭代之前等待承诺被履行。
这是代码示例
entriesToUpdate.forEach(function (item) {
SomeService.updateEntry(item).then(function (res) {
//Do some stuff here.
});
//Wait for the above promise to be fulfilled before going to next iteration
});
您可以定义一个函数来递归处理条目,如下所示:
function updateEntries(entries, i) {
if(i < entries.length) {
return SomeService.updateEntry(entries[i]).then(function() {
return updateEntries(entries, i+1);
});
}
}
updateEntries(entriesToUpdate, 0);
或者你可以把你的承诺串起来。
var promise = SomeService.updateEntry(entriesToUpdate[0]);
for(var i = 1; i < entriesToUpdate.length; i++) {
promise = promise.then(function() {
return SomeService.updateEntry(entriesToUpdate[i]);
});
}
(这些示例可能不起作用;我不熟悉 AngularJS promises。只有 ES6 承诺)
很确定我在这里漏掉了一些小东西。我在对象数组上应用 javascript foreach 循环。通过循环,我正在对 api 进行异步调用以更新数据。我想要的是 foreach 循环在继续下一次迭代之前等待承诺被履行。
这是代码示例
entriesToUpdate.forEach(function (item) {
SomeService.updateEntry(item).then(function (res) {
//Do some stuff here.
});
//Wait for the above promise to be fulfilled before going to next iteration
});
您可以定义一个函数来递归处理条目,如下所示:
function updateEntries(entries, i) {
if(i < entries.length) {
return SomeService.updateEntry(entries[i]).then(function() {
return updateEntries(entries, i+1);
});
}
}
updateEntries(entriesToUpdate, 0);
或者你可以把你的承诺串起来。
var promise = SomeService.updateEntry(entriesToUpdate[0]);
for(var i = 1; i < entriesToUpdate.length; i++) {
promise = promise.then(function() {
return SomeService.updateEntry(entriesToUpdate[i]);
});
}
(这些示例可能不起作用;我不熟悉 AngularJS promises。只有 ES6 承诺)