Задать вопрос
@bpGusar
*spoiler*

Как выполнить несколько запросов к mongodb и только после завершения всех сделать return?

Мне необходимо выполнить несколько запросов .countDocuments к базе, обвновить счетчик в каждом из них, и сделать return этого счетчика.
Я попробовал сделать async/await, но почему то срабатывает через раз. В один раз в .then обновленный счетчик приходит, в другой раз приходит стандартный 0.

Вот как я делал:
const countBookedAndOrderedBook = async () => {
            let bookedAndOrderedBooksArr = 0;

            await BookedBooks.countDocuments(
              { userId },
              (bookedBooksrr, countBookedBooks) => {
                if (bookedBooksrr) throw bookedBooksrr;
                console.log({ countBookedBooks });
                bookedAndOrderedBooksArr += countBookedBooks;
              }
            );

            return bookedAndOrderedBooksArr;
          };

          countBookedAndOrderedBook().then(count => {
            console.log(
              { count },
              servConf.maxBooksPerOneUserBookedAndOrderedAtTheSameTime
            );
...

Если делать запросы подряд то одни выполняются когда захотят, видимо есть какая то задержка, и если сделать несколько запросов подряд и потом вывести console.log(count) то count будет 0, а если в консоль по таймауту выводить то всё норм, но таймаут это бред.

В примере один запрос, но в теории их должно быть много.

Может делаю не так?
  • Вопрос задан
  • 237 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@bpGusar Автор вопроса
*spoiler*
Сделал с помощью async
parallel(
            [
              function(callback) {
                BookedBooks.countDocuments({ userId }, callback);
              }
            ],
            function(asyncErr, results) {
              if (
                results[0] <=
                servConf.maxBooksPerOneUserBookedAndOrderedAtTheSameTime - 1
              )
...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы