.each
.each(function(any item, int index, int length) iterator) -> Promise
使用给定的 iterator
函数迭代一个数组,或一个数组(它包含 promises(或 promsies 与值的混合))的 promise。该函数签名为 (value, index, length)
,其中 value
是输入数组种的各个 promise 的解决值。迭代串行地发生。如果迭代器返回一个 promise 或 thenable,然后下一个迭代将等待该 promise 的结果。如果输入数组中的任何 promise 被拒绝,返回的 promise 都将是拒绝的。
如果所有的迭代都成功解决,Promise.each 解决为未修改的原始数组。但是,如果有一个迭代拒绝或错误,Promise.each 立即停止执行,并且不处理任何进一步的迭代。在这种情况下返回错误或被拒绝的值而不是原始数组。
解决为未作修改原始数组,这个方法是为了用于副作用。如果 iterator
函数返回一个 promise 或一个 thenable,那么这个 promise 的结果就会被等待,然后再继续下一个迭代。
您可能想要使用 .each
的示例:
// Source: http://jakearchibald.com/2014/es7-async-functions/
function loadStory() {
return getJSON('story.json')
.then(function(story) {
addHtmlToPage(story.heading);
return story.chapterURLs.map(getJSON);
})
.each(function(chapter) { addHtmlToPage(chapter.html); })
.then(function() { addTextToPage("All done"); })
.catch(function(err) { addTextToPage("Argh, broken: " + err.message); })
.then(function() { document.querySelector('.spinner').style.display = 'none'; });
}