2016-01-20 26 views
1

很确定我在这里失去了一些小事。我正在应用一个对象数组的JavaScript foreach循环。随着循环,我正在对api进行异步调用来更新数据。我想要的是foreach循环等待承诺履行,然后再继续下一次迭代。Javascript/Angularjs:等待承诺履行之前,在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 
}); 

回答

2

你可以定义一个函数来递归处理条目就像这样:

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

+0

谢谢,(递归功能)解决我的问题的第一个解决方案:) – Kanban

相关问题