我正在onDisconnect
阅读firebase文档,但它并没有提到我正在寻找的操作。
https://firebase.google.com/docs/reference/js/firebase.database.OnDisconnect
目标:当连接断开连接时,我想运行一个更新与此连接数据无关的其他数据的函数。
我的代码如下:
let PlayerRef = database.ref("/players");
let MessageRef = database.ref("/messages");
let con=playersRef.child(0).push('test');
con.onDisconnect().remove(); // yes i want to remove that current connection
// BUT I also want to update the MessageRef that is
//using the data in the "con", how can I acheive this???
我将如何实现这一目标?
答案 0 :(得分:4)
您可以将onDisconnect()
处理程序附加到数据库中的任何位置,并将数据移除或写入该位置。
但要意识到onDisconnect()
可以预先将写入操作发送到Firebase服务器。因此,只要在附加onDisconnect
侦听器时可以在客户端上计算该值,就可以编写任何值。
答案 1 :(得分:0)
根据文档.remove
接受回调参数。我相信你可以利用它。像这样:
con.onDisconnect().remove(() => {
MessageRef.update(...);
});
答案 2 :(得分:0)
您还可以onDisconnect()
写入触发云功能的节点,然后运行“更新与此连接数据无关的其他数据”逻辑。
如果您希望在客户端断开连接时触发一个函数,则必须在客户端设置onDisconnect(),该函数会写入触发函数以响应该事件的位置。
通过此处的相关讨论:Combine onDisconnect with Cloud Functions in Firebase
答案 3 :(得分:0)
使用onDisconnect(),您可以在remove()中触发函数:
this.ref.onDisconnect().remove((err)=> {
if (err) {
console.error('could not establish onDisconnect event', err);
}
});
你最常在里面添加'if(err)'因为某些原因它在你激活连接时执行正确,而实际上最差 - 它会删除firebase数据库中该链接中的所有数据。
在firebase断开连接时添加触发器的更好方法是:
const Ref = new Firebase('...firebaseio.com');
Ref.child('users/water').on('value', (data) {
if (data.val() == true) {
/* trigger when disconnected */
} else {
/* trigger when connected */
}
});