Express返回空数组

时间:2019-12-27 15:38:18

标签: node.js express mongoose

我目前有以下代码

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嵌套函数的结果,但没有成功-仍然是一个空数组。

任何建议都值得赞赏!

1 个答案:

答案 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);
  });

希望这会有所帮助。