我在 firestore 中查询文档并尝试将其添加到数组中,但数组 returns 为空

I query firestore for a document and try to add it to an array, but the array returns empty

我正在尝试从旨在保存用户数据的文档中获取用户。该文档包含此数据

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

它 returns 到这里:

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

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

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 方法来简化代码。