У меня есть маршрут как:
router.get("/my_resource", myController.getResult);
Тогда мой контроллер выглядит так:
getResult: async (req, res, next) => {
try {
const param = req.query.param;
let response = {};
if (param) {
let [result1, result2] = await Promise.all([myModel.getResult1(param), myModel.getResult2(param)]);
console.log(result1);
console.log(result2);
}
res.send(response);
} catch (e) {
next(e);
}
}
И моя модель (которая запрашивает mongodb) выглядит так:
getResult1: (param) => {
new Promise((resolve, reject) => {
MongoSchema1.findById(param, (error, result) => {
if (error) return reject(error);
resolve(result ? result : {});
}).select("field1 field2");
})
}
getResult2: (param) => {
new Promise((resolve, reject) => {
MongoSchema2.findById(param, (error, result) => {
if (error) return reject(error);
resolve(result ? result : {});
}).select("field1 field2");
})
}
Здесь, когда я пытаюсь console.log()
в модельных функциях, я вижу, что результат не undefined
. Я получаю правильный результат. Однако я вижу, что console.log()
в методе контроллера выполняется раньше, чем console.log()
в методах модели.
В приведенном выше коде я выполняю асинхронные вызовы параллельно с Promise.all()
. Однако, даже если я пытаюсь запустить по одному, я все равно получаю неопределенный результат в методе контроллера. Что я делаю неправильно? Нужно ли импортировать какой-либо модуль, прежде чем я смогу await
? Благодаря.