我想异步使用Mongoose和Ajax向mongodb查询两个不同的东西。
代码如下:
var teams, faculties;
userModel.find({}).sort('-score').exec((err, result) => {
teams = result;
});
userModel.aggregate([{
"$group": {
_id: "$faculty",
average: {
$avg: "$score"
}
}
}]).exec((err, result) => {
faculties = result;
});
res.render('/scoreboard', {
information: [teams, faculties]
})
是否有更好的实现来处理查询以异步运行?
答案 0 :(得分:1)
使用async/await
,我们消除了回调,并使呼叫保持独立。如果具有否定条件,也可以通过放置错误特征来简化。
app.get('/myroute', async(req, res) => {
try {
const teams = await userModel.find({}).sort('-score')
const faculties = await userModel.aggregate([{
"$group": {
_id: "$faculty",
average: {
$avg: "$score"
}
}
}])
res.render('/scoreboard', { information: [teams, faculties] })
} catch (error) {
res.status(400).send(error)
}
})
答案 1 :(得分:0)
可以进行的另一项改进是使用Promise.all
并行运行它,因为这些功能彼此独立。
app.get('/myroute', async(req, res) => {
const response = await Promise.all([
userModel.find({}).sort('-score'),
userModel.aggregate([{
"$group": {
_id: "$faculty",
average: {
$avg: "$score"
}
}
}])
]); // response will return as [teams, faculties]
res.render('/scoreboard', { information: response })
})