我有一个路由如下:
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
吗?谢谢。
originalMail
和scrapeResult
来自哪里?您只声明了result1
和result2
,但从未使用过它们。此外,您的response
始终为空对象。 - Bergiresult1
和result2
。我已经更新了问题。 - kovac