firebase 在循环中查询FireStore文档

62lalag4  于 2022-11-25  发布在  其他
关注(0)|答案(1)|浏览(147)

我已经看到一些其他人张贴这个问题,我已经尝试了他们说的解决方案的工作,但没有任何工作对我来说迄今为止。
我从一个集合(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" });
};
ivqmmu1c

ivqmmu1c1#

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())
  });
}

另请参阅:Using async/await with a forEach loop

相关问题