@Pavel_Tkachenko
Да, я преступник. Моё преступление — любопытство

Цикл с асинхронностью NodeJS, как правильно сделать?

Есть к примеру цикл который проходится по массиву данных, и выполняет поиск этих данных в БД используя mongoose.
Пример кода :
// Модель mongoose
var Data = mongoose.model('data', DataSchema);
// Каой-то массив с данными которые нужно выбрать из БД
var searchData = [...];

// Цикл
searchData.forEach( el => {
    // Выборка данных
    Data.findOne({'el' : el})
        .then(function(result) {
            // Получив результат допустим пушим в другой массив для дальнейшего использования
            dataResultArray.push(result)
        })
})

МБ через asycn но пока не разобрался как правильно реализовать.
  • Вопрос задан
  • 138 просмотров
Решения вопроса 2
pxz
@pxz
✔ Совет: Вам помогли? Отметьте ответы решением.
Да, можно через async/await.

Сначала оберните весь код в async-функцию.

(async () => {
    // some code...
    let dataResultArray = [];

    for(let el of searchData) {
         const result = await Data.findOne({'el' : el});
         
         dataResultArray.push(result);
    }

    console.log(dataResultArray);

})();
Ответ написан
it_monk
@it_monk
Разработчик в oncloud.ru
for (el of searchData) {
  dataResultArray(await Data.findOne({ el: el }))
}


Только не забудьте, что этот код, так как он использует await, должен находиться в функции, объявленной с модификатором async. Можно, например, так:

async function main() {
  let Data = mongoose.model('data', DataSchema)
  let searchData = [...]

  for (el of searchData) {
    dataResultArray(await Data.findOne({ el: el }))
  }
}

main();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы