附加到<firebase-ref> .onDisconnect.remove()的回调何时触发?

时间:2015-08-02 19:38:33

标签: angularjs callback firebase

我正在使用AngularJS和Firebase来构建一个Web应用程序。 Firebase文档说可以将可选回调附加到onDisconnect().remove()。我预计只有当remove事件完成时才会触发此回调。但是,一旦附加了回调,它就会触发。我附上回调如下:

var ref = new Firebase("some-ref-url");
ref.onDisconnect().remove(function(err) {
    console.log("remove callback firing");
});
ref.set(true);

有没有办法确保只有在用户断开连接时才会触发回调,而不是在连接时立即触发回调?

基于我打算如何使用onDisconnect()的最小工作示例.remove():

<!DOCTYPE html>
<html>
  <head><meta charset="UTF-8">
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js"></script>
    <script src="https://cdn.firebase.com/js/client/2.2.7/firebase.js"></script>
    <script src="https://cdn.firebase.com/libs/angularfire/1.1.2/angularfire.min.js"></script>
  </head>
  <body>

    <div ng-app="myApp" ng-controller="myCtrl">{{hw}}</div>

    <script>
      var app = angular.module('myApp', ['firebase']);
      app.controller('myCtrl', function($firebase, $scope) {
        var ref1 = new Firebase("https://<my-app>.firebaseio.com/test1");
        var ref2 = new Firebase("https://<my-app>.firebaseio.com/test2");
        ref1.onDisconnect().remove(function(){
          console.log('remove callback firing');
          ref2.set(true);
        });

        $scope.hw = "Hello, World!";
      });
    </script>
  </body>
</html>

在上面的代码中,ref2在页面加载时设置为true(而不是在用户断开连接时)。如何确保仅在用户断开连接时将ref2设置为true?任何帮助表示赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:2)

您附加到onDisconnect()的处理程序在检测到用户已断开连接时在Firebase服务器上运行。在该阶段,完成处理程序无法再对您的客户端进行触发。

在这种情况下,最好将逻辑拆分为两个:

第一个使用onDisconnect()处理程序处理,后者使用.info/connected值侦听器处理。我已经链接到上面的每个节目指南。