为什么Array.prototype.forEach()不能识别异步函数中的await与for循环相同?

时间:2018-01-19 21:19:57

标签: javascript ecmascript-6 async-await

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

1 个答案:

答案 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 没有影响。