繁体   English   中英

Express 返回空数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM