Почему Array.prototype.forEach () не распознает ожидание в асинхронной функции так же, как цикл for? [Дубликат]

guest271314 спросил: 26 декабря 2017 в 07:39 в: javascript

У этого вопроса уже есть ответ:

  • Using async/await with a forEach loop 12 ответов

Использование 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));
    });
  });
  
})();

0 ответов