将未定义的 Firebase 函数写入 Firestore

Firebase Function writing undefined to Firestore

我是新手,如果需要更多信息,请告诉我!

我正在尝试将 MessageBird 与 Firestore 集成。除了需要 phone 数字的“to”字段外,它正在将所有内容写入数据库。我正在记录数字,它在控制台中正确输出,除了在我的 Firestore 中它被存储为 undefined。如果有人能提供任何关于为什么会这样的见解,那将不胜感激。我被困了一段时间。 (附上出现问题的部分功能和控制台截图)

我最初尝试在 doc.data()?.phoneNum 行上不使用 await,但刚收到 [object Promise]。现在它正在控制台中打印,我知道这与它无关。请帮忙!

admin.auth().listUsers().then((res) => {
    res.users.forEach((userRecord) => {
      try {
        const dbRef = firestore()
            .collection("collection").doc(userRecord.uid)
            .collection("collection").doc(document);
        dbRef.get().then((context) => {
          if (context.exists) {
            firestore()
              .collection("collection")
              .doc(userRecord.uid).get()
              .then(async (doc) => {
                number = await doc.data()?.field1;
                console.log("Sending message to: " + number);
              });
            firestore().collection("collection")
              .doc()
              .create({
                channelId: "id",
                type: "text",
                content: {
                  text: "message",
                },
                to: `${number}`,
              });
            functions.logger.log("SUCCESSFULLY SENT TO DB");
          } else {
            // console.log("**Unviable user**");
          }
        });
      } catch (error) {
        console.log(error);
      }
    });
  });

承诺似乎没有得到妥善处理。 .data() 没有 return 承诺,因此您不需要 await 。我也没有看到 var 'number' 在任何地方声明,所以它是未定义的。您可以尝试 运行 以下代码:

admin.auth().listUsers().then(async (res) => {
    try {
        for (const userRecord in res) {
            const dbRef = firestore()
                .collection("collection").doc(userRecord.uid)
                .collection("collection").doc(document);
            const context = await dbRef.get()
            if (context.exists) {
                const number = (await firestore().collection("collection").doc(userRecord.uid).get()).data().field1
                console.log("Sending message to: " + number);
                await firestore().collection("collection").add({
                    channelId: "id",
                    type: "text",
                    content: {
                        text: "message",
                    },
                    to: `${number}`,
                });
                functions.logger.log("SUCCESS");
            } else {
                // console.log("**Unviable user**");
            }
        }
    } catch (error) {

    }
});

另外 forEach 不等待 promises 解决,所以我使用了 for-in 循环。