Javascript 在ref.off()之后触发ref.onDiconnect()

Javascript 在ref.off()之后触发ref.onDiconnect(),javascript,firebase,react-native,firebase-realtime-database,react-redux,Javascript,Firebase,React Native,Firebase Realtime Database,React Redux,我目前面临firebase数据库的一个小问题。我的目标是取消订阅连接到firebase数据库的侦听器,这是关键代码示例: const statusHandler = () => {//logging if user is online. var ref = firebase.database().ref(`users/${PersonalId}/onlineState`); ref.on('value', function(snapshot){

我目前面临firebase数据库的一个小问题。我的目标是取消订阅连接到firebase数据库的侦听器,这是关键代码示例:

const statusHandler = () => {//logging if user is online.
        var ref = firebase.database().ref(`users/${PersonalId}/onlineState`);
        ref.on('value', function(snapshot){
            ref.onDisconnect().set(false);
            ref.set(true);
        });
        store.subscribe(() => {//redux listener to state change, if state gets changed this part of code gets executed
            var userToken = store.getState().auth.token;
            if(userToken == null){
                console.log("DETECTED")
                ref.off()
            }
        })
    };
到目前为止还不错,只要我更改redux存储,我就会触发ref.off(),从理论上说,从现在起,侦听器就应该不再侦听了。(通过console.log(“检测到”)我知道我的代码可以工作) 问题是我有一个重要的命令ref.onDiconnect(),当我断开与数据库的连接时,它应该在我的数据库中将一个值设置为false,但是他的ref.onDiconnect()根本不会被触发

似乎my ref.off()最终停止了侦听器,但是侦听器中应该执行的ref.onDisconnect()被忽略了。将代码的最后一部分更改为此是克服此问题的唯一方法吗

if(userToken == null){
    console.log("DETECTED")
    ref.set(false); //set value in firebase to false quickly before detaching listener next line
    ref.off()
   }

我仍在学习如何处理侦听器,这就是为什么我不太明白为什么我上面的代码没有按预期的方式工作。

我还没有测试过这一点,但我怀疑
.on
方法被存储并被调用,而不管
.off
是什么,后面会看到,因为这些是异步方法,但不是阻塞的o传统方法。@DIGIByte所以您基本上假设my.off甚至没有取消my.on侦听器?那么我应该如何以不同的方式取消my.off,从而停止my.on侦听器?