异步等待句柄 Promise <Pending> Express API
Posted
技术标签:
【中文标题】异步等待句柄 Promise <Pending> Express API【英文标题】:Async await handle Promise <Pending> Express API异步等待句柄 Promise <Pending> Express API 【发布时间】:2021-03-17 15:13:55 【问题描述】:我得到了这个 API 控制器:
exports.doctorsList = async (req, res) =>
const users = await User.find().exec();
let responseArray = await users.map(async (user) =>
const transaction = await MedicalConsultation.find(
doctorOwner: user._id,
).exec();
let cpLength = transaction.length;
return await
_id: user._id,
name: user.name,
email: user.email,
specialty: user.specialty,
role: user.role,
createdAt: user.createdAt,
c_p: cpLength,
status: user.status,
;
);
console.log(responseArray);
res.json(responseArray);
;
在 console.log 中我得到了:
[ Promise <pending> , Promise <pending> , Promise
<pending> ]
编写该代码的正确方法是什么?或者如何获取值?
【问题讨论】:
尝试将return await ...
改为return ...
。
完成! - 不起作用;(仍然是相同的结果...
尝试删除前两个等待并只保留事务 = 等待 ....
同样的结果,[ Promise users.map(async function() ... )
会产生一系列承诺,您需要在该承诺数组上使用await Promise.all(...)
。
所以而不是:
let responseArray = await users.map(async (user) =>
// your code goes here
);
你需要:
let responseArray = await Promise.all(users.map(async (user) =>
// your code goes here
));
如果您使用的是 bluebird,您可以使用更好的 API。
const Promise = require('bluebird');
let responseArray = await Promise.map(users, async (user) =>
// your code goes here
);
【讨论】:
以上是关于异步等待句柄 Promise <Pending> Express API的主要内容,如果未能解决你的问题,请参考以下文章
当异步函数不应该返回 Promise 时,为啥我需要等待它?