当前位置: 首页 > 知识库问答 >
问题:

Javascript/Angularjs:在Foreach循环中进行下一次迭代之前,等待promise实现

颜均
2023-03-14

我很确定我错过了一些次要的东西。我在对象数组上应用了一个javascript Foreach循环。在循环中,我正在对api进行异步调用以更新数据。我想要的是Foreach循环,在进入下一个迭代之前等待promise实现。

这是代码示例

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

共有1个答案

阎声
2023-03-14

您可以定义一个递归处理条目的函数,如下所示:

function updateEntries(entries, i) {
  if(i < entries.length) {
    return SomeService.updateEntry(entries[i]).then(function() {
      return updateEntries(entries, i+1);
    });
  }
}
updateEntries(entriesToUpdate, 0);

或者你可以把你的promise连锁反应。

var promise = SomeService.updateEntry(entriesToUpdate[0]);
for(var i = 1; i < entriesToUpdate.length; i++) {
  promise = promise.then(function() {
    return SomeService.updateEntry(entriesToUpdate[i]);
  });
}

(这些示例可能不起作用;我不熟悉AngularJSpromise。仅ES6promise)

 类似资料:
  • 问题内容: 我在node.js中有以下循环 UpdateDetail函数返回一个Promise。在继续循环的下一个迭代之前,我如何等待承诺解决/拒绝。 问题答案: 您可以为此使用异步库。然后转到async.eachSeries。 您需要先执行npm install async 这是示例:

  • 如何进入JavaScript循环的下一次迭代? 例如: MDN文档只提到完全脱离循环,而不是转移到下一个迭代。

  • 问题内容: 在循环中使用/ 是否有任何问题?我试图遍历文件数组和每个文件的内容。 这段代码确实有效,但是这可能会出问题吗?我让某人告诉我,您不应该在这样的高阶函数中使用/ ,所以我只是想问一下这是否有问题。 问题答案: 确保代码确实有效,但是我很确定它不会实现您期望的功能。它只会触发多个异步调用,但此后函数会立即返回。 顺序阅读 如果要顺序读取文件, 则不能使用。只需使用现代循环即可,该循环将按预

  • 我试图在PHP中的foreach循环的每次迭代之后进行回显。回声在全部完成之前不会呈现。我试过各种帖子的建议,但没有一个奏效。我的一些代码是: 有什么建议吗?谢了。

  • 问题内容: 我正在使用bluebird,方法 getAll 和 update return promises。我如何说“等到两个承诺返回,然后更新currentProduct值”?我对JS很陌生… 问题答案: 如果可以使用/,这将很简单。 或者,如果您只能使用简单的承诺,则可以遍历所有产品,并将每个承诺置于最后一个循环中。这样,仅当前一个问题解决时,它才会前进到下一个问题(即使它将首先迭代整个循环

  • 问题内容: 我正在制作一个经常刷新数据的函数,而我的请求链存在问题。问题是我有一个运行异步请求的for循环,并且for循环将在请求完成之前完成。 如果我要运行此代码,它将显示: 我知道是什么问题。事实上,for循环不会等待请求完成。我不知道这是一种解决方法。有人有什么想法吗? 问题答案: 您需要异步库。 例如, 可以这样写: 异步中有很多方便的实用程序函数,这些函数使回调的使用变得更加容易。