【问题标题】:I query firestore for a document and try to add it to an array, but the array returns empty我在 firestore 中查询文档并尝试将其添加到数组中,但数组返回空
【发布时间】:2021-10-02 01:57:33
【问题描述】:

我正在尝试从用于保存用户数据的文档中获取用户。文档保存了这些数据

First: "Josh"
Last: "Solders"
email: "example@gmail.com"
phone: "7865572525"
superAdmin: "on"
userID: "admin-1"

我运行这个函数:

  export const getAdmins = functions.https.onCall(async (data, context) => {
    var admins: FirebaseFirestore.DocumentData[] = [];
    admin.firestore().collection("admin").get().then((querySnapshot) => {
        var c = 0;
        querySnapshot.forEach((doc) => {
            admins[c] = doc.data();
            c++;
            console.log(doc);
            console.log(admins[c]);
        });
    });
    return admins;
  })

然后返回这里:

                const getAdmins = firebase.functions().httpsCallable('getAdmins');
                        // Passing params to data object in Cloud functinon
                getAdmins({}).then((results) => {
                    admins = results;
                    console.log("admins retrieved");
                    console.log(results);
                });

函数返回并且日志显示它访问了文件,但是数组返回空。我不太确定为什么这不能正确返回,除非在 local variable admins 内部调用后无法访问 local variable admins。我不认为这是有道理的,但这是我自己最好的解释。我可以使用一些帮助来解决这个问题。

【问题讨论】:

    标签: javascript html firebase google-cloud-firestore get


    【解决方案1】:

    return 语句甚至可能在您的承诺解决之前运行,因为它是异步的。您的函数是异步的,因此请尝试使用 await 而不是 Promise 链接:

    export const getAdmins = functions.https.onCall(async (data, context) => {
      const querySnapshot = await admin.firestore().collection("admin").get()
      return querySnapshot.docs.map((doc) => doc.data())
    })
    

    您也可以使用map 方法来简化代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-29
      • 2015-04-18
      • 1970-01-01
      • 2021-05-01
      • 2022-12-22
      • 1970-01-01
      • 2019-11-30
      • 1970-01-01
      相关资源
      最近更新 更多