我在 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
})
The onDisconnect
处理程序是为此用例制作的。但它要求在设置写入操作时知道写入操作的数据onDisconnect
。如果你仔细想想,这应该是有道理的:因为onDisconnect
发生after你的客户端断线了,那次写操作的数据必须是已知的before断开连接。
听起来您正在构建一个所谓的状态系统:一个包含当前在线的每个用户的节点的列表。这Firebase 文档有一个此类存在系统的示例 https://firebase.google.com/docs/database/web/offline-capabilities#section-sample。与您的方法的主要区别在于,它在文档中每个用户仅修改自己的节点。
所以:当用户上线时,他们为自己编写一个节点。然后当它们断开连接时,该节点就会被删除。由于所有用户将其节点写入同一父节点下,因此该父节点将反映在线用户。
实际的实现有点复杂,因为它也处理一些边缘情况。因此,我建议您查看我链接的文档中的代码,并将其用作您自己的类似系统的基础。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)