Javascript/Angularjs :等待承诺实现,然后再进入foreach Loop中的下一次迭代

Javascript/Angularjs : wait for promise to be fulfilled before going to the next iteration in foreach Loop

本文关键字:迭代 一次 Loop foreach 等待 Angularjs 承诺 实现 再进入 然后 Javascript      更新时间:2023-09-26

很确定我在这里错过了一些小东西。我正在对象数组上应用一个 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的承诺。只有ES6承诺)