断开连接时Firebase更新

时间:2017-10-12 13:26:30

标签: firebase firebase-realtime-database vue.js

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

由于列表会随着时间的推移而改变,在我断开连接的那一刻,我想更新此列表并更新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
        })

1 个答案:

答案 0 :(得分:3)

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

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

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

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