Javascript 返回一个2”的响应;同步;嵌套查询(Express、Mongoose)
我想返回如下元素数组:Javascript 返回一个2”的响应;同步;嵌套查询(Express、Mongoose),javascript,arrays,express,mongoose,Javascript,Arrays,Express,Mongoose,我想返回如下元素数组: ApiResponse = [ {_id: 1, name: Mike, transactions: 5}, {_id: 2, name: Jhon, Transactions: 10} ] 第一个数据“Users”来自对模式“Users”的查询,“Transactions”编号来自对其他模式“Transactions”的查询 我尝试了下一个逻辑: 使用以下命令获取所有用户: 使用map函数迭代“respUsers”数
ApiResponse = [
{_id: 1,
name: Mike,
transactions: 5},
{_id: 2,
name: Jhon,
Transactions: 10}
]
第一个数据“Users”来自对模式“Users”的查询,“Transactions”编号来自对其他模式“Transactions”的查询
我尝试了下一个逻辑:
exports.list = async (req, res) => {
//Find all users
const respUsers = await User.find().exec();
const responseArray = respUsers.map(async (user) => {
let transactions = await Transactions.find({
doctorOwner: user._id,
}).exec();
let transactionsLength = await transactions.length;
return {
_id: user._id,
name: user.name,
transactions: transactionsLength
};
});
console.log(responseArray);
res.json(responseArray);
};
但我得到了3个空数组[]、[]、[]
如果我在服务器端使用console.log,我会得到:
[ Promise { <pending> }, Promise { <pending> }, Promise { <pending> } ]
[Promise{},Promise{},Promise{}]
我该怎么做呢?这段代码有效。它是关于Promise.all()的。它创建了一个承诺,当内部的所有其他承诺都得到解决时,该承诺就会得到解决
//模拟User.find().exec())
异步函数getUsers(){
还愿([
{
_id:“id1”,
姓名:“约翰”,
},
{
_id:“id2”,
姓名:“约翰尼”,
},
{
_id:“id3”,
姓名:“乔纳斯”,
},
]);
}
//模拟事务。查找({}doctorOwner:user.\u id)
异步函数getTransactions(){
常数arr=[];
for(设i=0;i{
//查找所有用户
让respUsers=wait getUsers();
const responseArray=Promise.all(
respUsers.map(异步(用户)=>{
让事务=等待getTransactions();
让TransactionLength=transactions.length;
常数返回={
_id:user.\u id,
name:user.name,
事务:TransactionLength,
};
回归回归;
})
);
控制台日志(等待响应RAY);
};
超级函数()代码>
。作为控制台包装器{
最大高度:100%!重要;
排名:0;
}
我添加了如您所示的等待JU,但仍然得到了[Promise{},Promise{},Promise{}]奇怪的结果。仔细考虑之后,map函数似乎已经正确地完成了它的工作,但它返回了承诺。。。我做了编辑。现在的输出是什么?我对你温和地建议我的代码进行了所有更改,我仍然得到[Promise{},Promise{},Promise{}]我调试并编辑了它,这是代码!当然,您应该删除并替换仿真函数,它们只是为了使用SO代码片段进行演示;抱歉不起作用:(