我在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
})
答案 0 :(得分:3)
onDisconnect
处理程序是针对此用例而制作的。但它要求在设置onDisconnect
时知道写操作的数据。如果您考虑一下,这应该是有道理的:因为onDisconnect
发生在之后客户端断开连接,该写操作的数据数据必须在之前知道强>断开。
听起来您正在构建一个所谓的在线系统:一个列表,其中包含当前在线的每个用户的节点。 Firebase documentation has an example of such a presence system。CSS spec。与您的方法的主要区别在于,在文档中,每个用户只修改自己的节点。
所以:当用户上线时,他们会为自己编写一个节点。然后当它们断开连接时,该节点将被删除。由于所有用户都在同一父节点下编写节点,因此该父节点将反映在线用户。
实际实现涉及更多,因为它也处理一些边缘情况。因此,我建议您查看我链接的文档中的代码,并将其作为您自己的类似系统的基础。