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



我正试图从一个文档中获得一个用户,该文档旨在保存用户数据。文档保存这个数据

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一旦在get内部调用就无法访问。我不认为这有意义,但这是对我自己最好的解释。我需要一些帮助来解决这个问题。

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

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

最新更新