我看到其他人贴了这个问题,我也尝试了他们说的解决方案,但是到目前为止没有任何方法对我有效。
我正在查询单个集合(a)并获得文档数组,然后我想遍历数组中的每个文档,并根据第一个集合(a)中每个文档的值从另一个集合(B)中查询。
这是我的代码,我已经尝试了async/await
(如本例所示)以及.then
与Promise.all()
export const getUserEvents = async (req: Request, res: Response) => {
console.log("getUserEvents:req.params.userId: ", req.params.userId);
try {
let events: Event[] = [];
const snapshot = await db.collection("eventPeople").where("userId", "==", req.params.userId).get();
snapshot.forEach(async (doc) => {
const eventRef = await db.collection("events").where("eventId", "==", doc.data().eventId).get();
eventRef.forEach((eventDoc) => {
console.log("event: ", eventDoc.data())
});
});
console.log("events: ", events)
return res.json({ events: events });
} catch (err) {
functions.logger.error("unable to query eventPeople using userId", { userId: req.params.userId, error: err });
}
return res.json({ events: "events" });
};
forEach
关闭器不期望async
函数,因此循环中的await
不会使forEach
周围的代码等待任何东西。
要使整个循环等待,使用for of
:
for (const doc of snapshot.docs) {
const eventRef = await db.collection("events").where("eventId", "==", doc.data().eventId).get();
eventRef.forEach((eventDoc) => {
console.log("event: ", eventDoc.data())
});
}
参见:使用async/await和forEach循环