Firebase onDisconnect如何触发其他功能

时间:2017-03-16 02:31:40

标签: javascript firebase firebase-realtime-database

我正在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???

我将如何实现这一目标?

4 个答案:

答案 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 */
        }
    });