断开连接时的 Firebase 更新

标签 firebase firebase-realtime-database vue.js

我在 firebase 上有一个节点,其中列出了游戏中的所有玩家。此列表将在新玩家加入时更新。当当前用户 ( me ) 断开连接时,我想将自己从列表中删除。

由于列表会随时间变化,在我断开连接的那一刻,我想更新这个列表并更新 firebase。

这是我考虑的方法,但它不起作用,因为 .update 不接受函数。只有对象。但是如果我事先创建对象,当 .onDisconnect 调用时,它不会是最新的对象......我应该怎么做?

payload.onDisconnect().update( () => {
            const withoutMe = state.roomObj
            const index = withoutMe.players.indexOf( state.userObj.name )
            if ( index > -1 ) {
                withoutMe.players.splice( index, 1 )
            }
            return withoutMe
        })

最佳答案

onDisconnect 处理程序是为这个用例制作的。但它要求写入操作的数据在您设置 onDisconnect 时是已知的。如果您考虑一下,这应该是有道理的:因为 onDisconnect 发生在您的客户端断开连接之后,所以该写入操作的数据必须是已知的断开连接之前。

听起来您正在构建一个所谓的状态系统:一个列表,其中包含当前在线的每个用户的节点。 Firebase documentation has an example of such a presence system .与您的方法的主要区别在于它在文档中每个用户只修改他们自己的节点。

因此:当用户上线时,他们为自己编写一个节点。然后当他们断开连接时,该节点将被删除。由于所有用户都将他们的节点写在同一个父节点下,因此该父节点将反射(reflect)在线用户。

实际的实现要复杂一些,因为它也处理一些边缘情况。因此,我建议您查看我链接的文档中的代码,并将其用作您自己的类似系统的基础。

关于断开连接时的 Firebase 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46710850/

相关文章:

ios - 使用 cocoapods for firebase 的 React-native 共享扩展问题

ios - 电子邮件注册方法的 .onCreate 触发器中未定义用户显示名称

ios - 为什么 Firebase 在更新值时会制作额外的 map ?

javascript - Vue更新多维数组中的值

firebase - 我们可以将 firebase 数据库与 Webflow 连接吗?

firebase - Flutter - 尝试构建 future 上下文以检查用户是否已登录,但我的构建方法有错误

ios - Firebase 数据库中的 PhotoUrl 在 CoverFlow 中显示

java - 检查 Firebase 实时数据库中的值是否等于字符串

vue.js - 使用 Vue/Nuxt 删除传单属性?

javascript - VueJS验证: Clicking "add" button leads field to get a value