@jeruthadam

Почему for..of выполняется поочереди, в отличии от forEach, map, и почему об этом нету ни слова в MDN?

const array = [1, 2, 3, 4, 5];

function someAsyncFunc(data) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(data);
    }, 5000);
  });
}

(async () => {
  for (let a of array) {
    const result = await someAsyncFunc(a);
    console.log(result);
  }
})();


Почему? Почему это не описано? Где об этом почитать? Какие другие цикли выполняются подобным образом?
  • Вопрос задан
  • 208 просмотров
Пригласить эксперта
Ответы на вопрос 3
Moskus
@Moskus
https://medium.com/@nataliecardot/foreach-vs-for-o...
Также https://developer.mozilla.org/en-US/docs/Web/JavaS... (см. абзац перед последним примером).
Ответ написан
@storm_r1der
forEachявляется синхронным. Однако ваша функция обратного вызова - нет. Поэтому forEachсинхронно вызывает вашу функцию, один раз для каждой записи в массиве, которая начинает свою работу. Позже работа, которая начала завершаться асинхронно, вскоре после того, как forEachзакончилась.

Проблема в том, что ваш обратный вызов является async, а не то, что forEachявляется асинхронным.

В общем, когда вы используете API вроде forEach который ничего не делает с возвращаемым значением (или не ожидает обещания в качестве возвращаемого значения), либо:
  • Не передавайте ей async функцию или
  • Убедитесь, что вы обрабатываете ошибки внутри самой функции
Ответ написан
miliko0022
@miliko0022
Краткие личные сведения, включая интересующую вас
Это потому, что они используют async / await, с forEach и map немного сложнее получить последовательное поведение.Посмотрите сможет это типа поможет LINK!!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 30 000 до 65 000 руб.
от 60 000 до 90 000 руб.
BSSL Москва
от 50 000 до 150 000 руб.