Asyn c Javascript с MongoDB - - PullRequest
       16

Asyn c Javascript с MongoDB -

0 голосов
/ 09 июля 2020

У меня есть две функции на моем сервере, которые, по сути, выполняют следующие функции:

const function2 = async(var1, var2, var3, var4) => {
  var x = await function1(var1);
  console.log(x);
}
var function1 = async function (var1){
  var array = [];
  var1.forEach(async function(val){
    try{
      smallarr = await Item.find({
        val:val.x
      })
      array.push(smallarr);
    }
  })
  console.log(array);
  return array;
}

Однако оператор журнала в функции 2 вызывается перед оператором журнала в функции 1. Я исхожу из следующего примера из старого потока StackExchange

Пример снимка экрана

Что не так в моем коде? Что я не понимаю в async / await? Я могу предоставить реальный код вместо симпатичного примера, но они довольно большие функции.

1 Ответ

2 голосов
/ 09 июля 2020

Вызов forEach не ожидает, его обратный вызов - это асинхронная c функция, которая возвращает обещания, но они не ожидаются. Его возвращаемое значение уходит в пустоту. Следовательно, console.log(array); выполняется перед заполнением массива значениями.

Вы можете исправить это, используя обычный for l oop. NB: try без catch не очень полезно (и ему понадобится finally), поэтому вы можете просто оставить это.

for (let val of var1) {
    smallarr = await Item.find({ val:val.x })
    array.push(smallarr);
}
...