Firebase 9.0.0中取消订阅的正确方法

4
在以前的版本中,我会执行以下操作:
// Declaring db reference
let ref = firebase.database().ref('features')

// Creating the listener
let listener = ref.on('value', snapshot => { 
            
    if(snapshot.val()){
        // Reading data
    }

}

// Unsubscribing
ref.off('value', listener)

自 Firebase 9.0.0 以后,我注意到 onValue() 函数返回了一个取消订阅的回调函数。
/** A callback that can invoked to remove a listener. */
export declare type Unsubscribe = () => void;

因此,我的当前方法:

// Declaring db reference
let featuresRef = ref(db, 'features')

// Creating the listener
let unsubscribe = onValue(featuresRef, snapshot => { 
            
    if(snapshot.val()){    
        // Reading data
    }
            
})

// Unsubscribing       
unsubscribe()

从函数定义上看,off()函数仍然存在,并且根据文档

通过在 Firebase 数据库引用上调用 off() 方法来移除回调。

我需要使用返回的取消订阅回调函数还是 off() 函数来删除监听器?


1
返回的函数和 off 都可以用于移除监听器。你对它们中的任何一个有问题吗? - Frank van Puffelen
不,我只是好奇这两种方法之间是否有任何区别。我会选择让取消订阅回调,因为它看起来更易读。 - Erik Martín Jordán
1
这正是为什么它在这次重大改变中被引入的原因。我们都更喜欢新的模式,但不想完全删除旧的隐喻。我将写一个快速答案来给出一些结论。 - Frank van Puffelen
1个回答

5

Firebaser在此

返回的函数和off都可以用于移除监听器。在新版本SDK中,它们没有功能上的区别,而且在内部实现上也基本相同。

off()风格的取消订阅自第一个版本以来就在Firebase实时数据库SDK中可用。在某个时候,新的Firebase产品开始返回一个取消订阅函数,并且许多开发人员似乎更喜欢这个,因此我们在v9 SDK中添加了这种样式的取消订阅。但是,off仍然可用,并且在功能上完全相同。


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