我在 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
方法来简化代码。
我正在尝试从旨在保存用户数据的文档中获取用户。该文档包含此数据
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
方法来简化代码。