在循环中查询FireStore文档



我看到其他人贴了这个问题,我也尝试了他们说的解决方案,但是到目前为止没有任何方法对我有效。

我正在查询单个集合(a)并获得文档数组,然后我想遍历数组中的每个文档,并根据第一个集合(a)中每个文档的值从另一个集合(B)中查询。

这是我的代码,我已经尝试了async/await(如本例所示)以及.thenPromise.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循环

最新更新