Код выполняется асинхронно

Есть кусок кода:

let news = [];

docs_id.forEach(async el => {
  const news_ = await News.find({ _id: el._id });
  news.push(news_);
  console.log(news.length)
});

console.log(news.length)

console.log('---------------');

Здесь переменная docs_id равна массиву подобного вида:

[
  { _id: 5ff470ba061b231930bc4717 },
  { _id: 5ff470d0061b231930bc4718 }
]

Почему-то при выполнении кода в консоль выводится:

0
---------------
1
2

То-есть .forEach выполняется асинхронно.

Как это можно исправить?


Ответы (1 шт):

Автор решения: entithat

У Вас forEach просто выполняет асинхронную функцию, которая даст результат только через некоторое время. Но два следующих console.log'a выполнятся сразу. Пример очень похож на Ваш.

(async() => {
  let news = [];
  for (const el of docs_id) {
    const news_ = await News.find({
      _id: el._id
    });
    news.push(news_);
    console.log(news.length);
  }

  console.log(news.length);
  console.log('---------------');
})();
→ Ссылка