我正试图从一个文档中获得一个用户,该文档旨在保存用户数据。文档保存这个数据
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
方法来简化代码。