我有一个处理程序来处理nodejs中的特定路由。
async function handleGetAllBookingByUserId(req, res, next) {
try {
let bookings = await pool.execute(queries.getAllBookingByUserId, [
req.params.userId,
]);
let map_ = await groupByBookings(bookings);
console.log(map_.values());
res.send(map_.values());
} catch (err) {
next(err);
}
}
函数groupby订票:
async function groupByBookings(bookings) {
let map_ = new Map();
for (let i = 0; i < (await bookings[0].length); i++) {
let current = await bookings[0][i];
let {
bookingid,
venueid,
userid,
bookingtimestamp,
bookingstatus,
paymenttype,
price,
timeslotstart,
timeslotend,
noofcourts,
} = current;
if (map_.has(current.id)) {
map_.get(current.id).slots.push({ timeslotstart, timeslotend });
} else {
newObj = {
bookingid,
venueid,
userid,
bookingtimestamp,
bookingstatus,
paymenttype,
price,
noofcourts,
};
newObj.slots = [];
newObj.slots.push({ timeslotstart, timeslotend });
map_.set(bookingid, newObj);
}
}
return map_;
}
当我控制台日志我得到输出,但不知何故,响应是一个空对象。我认为我做了一些错误的异步逻辑,我不确定。任何帮助吗?
我没有足够的声誉来评论,所以这个答案可能不是100%准确的。在我看来,您已经解决了处理程序中的承诺:
let bookings = await pool.execute(queries.getAllBookingByUserId, [
req.params.userId,
]);
那么为什么要在groupbybooking函数中再次等待它呢?:
for (let i = 0; i < (await bookings[0].length); i++) {
let current = await bookings[0][I];
在我看来,你可以对数据进行分组,而不需要等待它,也许这就是与异步逻辑混淆的地方
希望有帮助
我能够得到响应,因为Map.values()是一个可迭代对象。
我必须传递结果
[...map_.values()]
所以像
res.send([...map_.values()])