我目前有以下代码
router.get('/uri', (request,response) => {
let final = [];
TP.find({userID: request.userID})
.then(tests =>{
tests.forEach(test => {
A.findById(test.assignmentID)
.then(assignment => {
final.push({
testID: test._id,
name: assignment.title,
successRate: `${test.passedTests}/${test.totalTests}`
})
})
.catch(error => {
console.log(error)
})
})
return response.send(final);
})
.catch(err => {
console.log(err);
return response.sendStatus(500);
})
})
该代码应该查询2个MongoDB数据库,并构造具有特定信息的对象数组,并将其发送给客户端。
但是,当我调用该端点时,总是得到一个空数组。
我尝试过使函数async
并使它们wait
嵌套函数的结果,但没有成功-仍然是一个空数组。
任何建议都值得赞赏!
答案 0 :(得分:2)
forEach
并不关心其中的承诺。使用for..of
循环或将其更改为promise.all
。上面的代码可以简化为
router.get('/uri', async (request,response) => {
const tests = await TP.find({userID: request.userID});
const final = await Promise.all(tests.map(async test => {
const assignment = await A.findById(test.assignmentID);
return {
testID: test._id,
name: assignment.title,
successRate: `${test.passedTests}/${test.totalTests}`
};
}));
return response.send(final);
});
希望这会有所帮助。