firebase - Firebase 云函数中的条件语句
问题描述
我的应用中有两种类型的用户。我希望通过 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(),
}
);
}
});
解决方案
由于要检查两个条件然后更新数据库,因此首先需要获取引用的内容。即使数据库中的基础位置没有值,条件 user1 的引用变量也将始终具有值。相反,您需要检查基础价值是否存在。
这必须通过异步编码(承诺)来完成,因为您需要检查的不是一个而是两个位置。
请通读 firebase 文档以了解创建参考变量和获取基础数据之间的区别。检查此文档https://firebase.google.com/docs/reference/node/firebase.database.DataSnapshot#exists
推荐阅读
- vb.net - 如何在 Outlook 中切换视图
- powershell - 用于创建新用户错误的学生脚本:System.String 类型为“System.Management.Automation.SwitchParameter”
- typescript - 为什么以`T extends undefined`为条件的Typescript类型,用`boolean`实例化T,将T解析为`never`?
- r - 无法从某些包中找到功能“某些功能”
- http - 当http响应相同时如果没有缓存会发生什么
- python - 无法使用系统分配的标识从 Azure 容器实例访问 Azure Vault
- node.js - Xero API:创建新项目时收到错误“PurchaseAccountId 帐户无效”
- javascript - 使用 turf.intersect 时出现拓扑异常
- android - 检查 ListView 中的一个 CheckBox 使用 Flutter 来检查所有其余的 CheckBox
- libreoffice-basic - 无法从 libreoffice 6.4.3.2 basic 中的单元格获取值