【发布时间】:2021-02-07 06:21:58
【问题描述】:
我的应用中有两种类型的用户。我希望通过 firebase firestore 和实时数据库在线检测他们的存在。但是,当我部署它时,只执行 user1 条件语句。
//这里是云函数
exports.onUserStatusChange = functions.database
.ref("/{uid}/presence")
.onUpdate(async (change, context) => {
// Get the data written to Realtime Database
const isOnline = change.after.val();
// Get a User1 reference to the Firestore document
const user1StatusFirestoreRef = firestore.doc(`user1_data/${context.params.uid}`);
// Get a User2 reference to the Firestore document
const user2StatusFirestoreRef = firestore.doc(`user2_data/${context.params.uid}`);
console.log(`status: ${isOnline}`);
// // Update the values on Firestore
if (user1StatusFirestoreRef) {
return user1StatusFirestoreRef.update(
{
presence: isOnline,
last_seen: Date.now(),
}
);
}
if (user2StatusFirestoreRef) {
return user2StatusFirestoreRef.update(
{
presence: isOnline,
last_seen: Date.now(),
}
);
}
});
【问题讨论】:
-
给定用户能否同时满足这两个条件?如果是这样,您想更新 Firestore 中的两个位置吗?
-
给定用户不能同时满足这两个条件。应用程序中有两类用户。我想要一种情况,如果任一用户类别打开应用程序,适当的条件会触发所需的功能。目前只有第一个条件有效。
-
在这种情况下,您应该首先获取引用的内容。即使数据库中的基础位置没有值,条件 user1 的引用变量也将始终具有值。请通读 firebase 文档以了解创建参考变量和获取基础数据之间的区别。检查此文档firebase.google.com/docs/reference/node/…
-
谢谢。这个方法对我有用:return promise.all([ condition1, condition2]);
-
届时将给出正确答案。
标签: firebase firebase-realtime-database google-cloud-firestore google-cloud-functions