[英]Express returns empty array
我目前有以下代码
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
嵌套函数的结果但没有成功 - 仍然是一个空数组。
任何建议表示赞赏!
forEach
不关心里面的 promise。 无论是使用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);
});
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.