所以我正在构建一个云函数,它接受customerID,根据customerID过滤文档并返回文档列表。遗憾的是,它返回了一个空数组。我相信这是一个简单的解决方案。
这是云功能:
export const getCalendarItems = functions.https.onCall(async (data, context) => {
const uid = data.uid;
if (context.auth) {
let array = [{}];
const ref = admin.firestore().collection("photoshoots");
const query = ref.where("customerID", "==", uid);
query.onSnapshot((querySnapshot) => {
querySnapshot.docs.forEach((documentSnapshot) => {
array.push({
...documentSnapshot.data(),
key: documentSnapshot.id,
});
});
});
return array;
} else {
return false;
}
});
这是我从客户端调用它时的代码。
const uid = auth().currentUser.uid;
functions()
.httpsCallable("getCalendarItems")({
uid: uid
})
.then(result => {
console.log(result.data);
});
这里还有一张Firestore的屏幕截图。
消防仓库屏幕截图
您的函数有几个问题。
首先,您不应该在Cloud Functions中使用onSnapshot()
进行查询。改为使用get((执行一次查询。onSnapshot()
附加了一个侦听器来实时接收更新,这不是您想要的。
其次,您的函数需要返回一个promise,该promise使用要发送给客户端的数据进行解析。get()
返回一个带有QuerySnapshot对象的promise。您需要使用它来获取与查询匹配的文档列表。您可以使用该列表将结果发送回客户端。
在进行了建议的更改后,您想要的函数代码将与现在的代码明显不同。