LINUX.ORG.RU

Проблема с выгрузкой документов из MongoDB и async/await

 , , ,


0

1

Сабж, на SO чет ни кто не отвечает. Вот код:

async function getCities() {
      let cities = [];
      try {
        console.log(1);
        const cursor = await db.collection('cities').find();
        await cursor.forEach((item) => {
          cities.push(item);
          console.log(2);
        });
        console.log(3);
      } catch (error) {
        console.log('Cant get cities!', error);
      }
      return cities;
}
В консоль выводится 1, 3, 2, 2, 2, .... 2. Т.е. код выполняется асинхронно, не смотря на await.

P.S. https://ru.stackoverflow.com/questions/741179/Проблема-с-выгрузкой-документов...

P.P.S. Судя по тому, что написано в MDN, forEach возвращает undefined, по этому, видимо, и не работает. Но как в таком случае ваще заюзать await?

Deleted

Последнее исправление: Bizun (всего исправлений: 1)

Про async/await почему-то ты знаешь, а про for-of нет.

И вообще зачем тебе тут await в цикле? Внутри него нет ничего асинхронного.

lovesan ★★
()
Последнее исправление: lovesan (всего исправлений: 1)
Ответ на: комментарий от Deleted

await cursor.forEach <- вот тут такое впечатление, что код набирали наугад. Разберись, кто промис возвращает, если пытаешься await втыкать.

Vit ★★★★★
()

А почему нельзя отладчиком посомтреть?

nikolnik ★★★
()
static async getCities() {
  let cities = [];
  try {
    let cursor = await db.collection('cities').find({});
    while(await cursor.hasNext())
      cities.push(await cursor.next());
  } catch (error) {
    console.log('Cant get cities!', error);
  }
  return cities;
}

В общем, вот так сделал. В гугле куча примеров с методом toArray, хз, я так и не смог его заюзать. Может из какой-то страой версии монги.

Deleted
()
Последнее исправление: Bizun (всего исправлений: 1)
Ответ на: комментарий от silver-bullet-bfg

Да не захотел подключать его, у меня с монгой ооочень мало работы. Буквально пара запросов. Оверкил, короче.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.