Нулевое возвращаемое значение из вложенной асинхронной функции

#javascript #node.js #mongodb-query

#javascript #node.js #mongodb-запрос

Вопрос:

Как эта функция возвращает null? это из-за области видимости переменной или времени выполнения функций?

 async function getBook() {
      var book;
      await libray.findONe({ cat: 1 }, {}, async (err, res) => {
        await section.findONe({ secId: res.secI }, {}, (error, result) => {
          book = resu<
        });
      });
    
      book = resu<
    }


return book;
}
 

Комментарии:

1. Вы никогда не добьетесь успеха здесь, смешивая обратные вызовы и await . await делает что-то полезное только тогда, когда ожидает обещания, и когда вы передаете обратный вызов своим функциям базы данных, они не возвращают обещание. Пожалуйста, уделите секунду, чтобы узнать, что await на самом деле делает и как это использовать, и как использовать promises с вашей базой данных. Вы не можете просто проходить и await в любом месте и ожидать, что это сделает что-то полезное.

Ответ №1:

Попробуйте это

 async function getBook() {
      const res = await libray.findOne({ cat: 1 });
      const book = await section.findOne({ secId: res.secI });
      return book;
    }
 

Ответ №2:

Я думаю, проблема в том, что вы возвращаетесь из функции до завершения асинхронной функции. итак, один из удобных способов решить эту проблему — создать функцию обратного вызова из асинхронной функции.

Извините, я не специалист по js, поэтому я не могу опубликовать код, но я думаю, вы поняли идею..