在await
函数中的for
循环中使用async
可提供等待迭代中当前Promise
完成的预期执行结果
const story = [1,2,3,4,5];
(async() => {
for (var i = 0; i < story.length; i++) {
await new Promise(function(resolve) {
setTimeout(function() {
resolve(story[i])
}, 1000)
}).then(function(chapter) {
document.body
.appendChild(document.createTextNode(chapter));
});
}
})()
为什么Array.prototype.forEach()
在传递给Promise
的回调中await
使用.forEach()
时,不提供等待当前const story = [1,2,3,4,5];
(async() => {
story.forEach(async function(chapterUrl) {
// does not await for Promise fulfillment
await new Promise(function(resolve) {
setTimeout(function() {
resolve(chapterUrl)
}, 1000)
}).then(function(chapter) {
document.body
.appendChild(document.createTextNode(chapter));
});
});
})();
实现的相同功能?
csrf_meta_tags
答案 0 :(得分:3)
await
暂停当前函数,直到Promise
被解析。在await
循环中使用多个for
调用时,它们都在同一个块范围内执行,因此,在继续之前等待前一个调用完成。
使用forEach
函数时,循环的每次迭代都在自己的范围内运行,因此每个await
对其他use OmniAuth::Builder do
# allow us to connect this App via the /fooblefuzz route instead of just
the root of the heroku app URL /
configure do |config|
config.path_prefix = '/fooblefuzz/auth'
end
没有影响。