【发布时间】:2018-10-22 01:08:12
【问题描述】:
我有以下 Express 端点:
const all = require('promise-all');
router.post('/verify', upload.single('photo'), async (req, res) => {
...
await all({'p1': p1, 'p2': p2}).then((response) => {
...
console.log("Response:",
ruleCtrl.manageRule(detection, res);
});
});
ruleCtrl.manageRule如下:
export async function manageRule(identifierDetected, res) {
let rule = db.getRule(identifierDetected);
await all([rule]).then((ruleExtracted) => {
...
res.json(ruleExtracted);
}).catch((err) => {
res.status(418).send("DOCUMENT_NOT_RECOGNIZED");
});
}
和db.getRule:
export async function getRule(idRule) {
return new Promise((resolve, reject) => {
Rule.findOne({ruleID: idRule}, (err, rule) => {
if (err) {
reject("MongoDB Rule error: " + err);
} else {
resolve(rule);
}
});
})
}
我的回复是到manageRule,这个函数取决于提取到await all 中的值。所以,现在,Express 在从 mongoose 数据库 (db) 获取信息之前返回一个响应。
解决这个问题的方法是什么?
谢谢大家!
【问题讨论】:
-
是“db.getRule(identifierDetected);”异步?
-
await all.then()没什么意义。如果您要使用.then(),请不要使用await。或者,在没有.then()的情况下执行let results = await all(...),然后在下一行代码中使用results。选择一种风格或另一种风格。您正在使用await,但没有利用您使用await的原因。这是没有意义的。要么利用它的优势,要么不使用它。 -
@Faheem 更新了我的帖子。
-
将
Promise.all()与一个promise 一起使用也是没有意义的。 -
@jfriend00 我已经删除了最后一个等待(同意你的观点。它没有意义),但结果相同......
标签: node.js express async-await