取消订阅Firebase实时数据库

4
我在我的Ionic应用程序中有一个聊天系统,显示在模态窗口中。在模态窗口中,我有下面的代码。似乎使用一段时间后会变得有点缓慢。
我怀疑这是因为我应该在关闭模态窗口时取消对Firebase的订阅。换句话说,每次单击打开模态框的按钮时都会进行新的订阅。是这种情况吗?如果是,我该怎么办?我在文档中没有看到取消订阅的选项?
ionViewDidLoad() {
    firebase.database().ref('chatrooms/'+this.roomkey+'/chats').limitToLast(30).on('value', resp => {

        this.chats = [];
        this.chats = snapshotToArray(resp);
        this.content.scrollTo(0, 999999, 200);

    });
}

我尝试了以下代码来调用 off,但不确定这是否是正确的方法?我将其放在了 ionViewDidLeave() 内部。

firebase.database().ref('chatrooms/'+this.roomkey+'/chats').limitToLast(30).off('value');
1个回答

10

当不再需要某个监听器时,应始终删除数据库引用上的任何监听器。否则,该监听器将在数据更改时继续接收快照。

要删除监听器,请在与调用 on() 相同的引用上使用 off() 方法。将您传递给 on() 的回调函数也传递给它。另请阅读有关分离监听器的文档。


Doug,非常感谢您的回复。我已经编辑了我的问题,这是您建议的吗?基本上是将用于“on”的代码复制并将其替换为“off”吗? - Chris
1
你不再需要监听器了,只需使用 off('value') - Frank van Puffelen
谢谢 - 我刚刚又编辑了一下问题。这样可以吗? - Chris
不要使用“相同的回调函数”,即off("value", someCB)。 - Gabriel Petersson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接