【问题标题】:Javascript/Angularjs : wait for promise to be fulfilled before going to the next iteration in foreach LoopJavascript/Angularjs:等待承诺完成,然后再进入 foreach 循环中的下一次迭代
【发布时间】:2016-04-25 18:49:15
【问题描述】:

很确定我在这里遗漏了一些小东西。我在对象数组上应用 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 
});

【问题讨论】:

    标签: javascript angularjs angular-promise


    【解决方案1】:

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

    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 承诺)

    【讨论】:

    • 谢谢,第一个解决方案(递归函数)解决了我的问题:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 2015-12-22
    • 2021-05-21
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    相关资源
    最近更新 更多