我正在使用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?任何帮助表示赞赏。提前谢谢。
答案 0 :(得分:2)
您附加到onDisconnect()
的处理程序在检测到用户已断开连接时在Firebase服务器上运行。在该阶段,完成处理程序无法再对您的客户端进行触发。
在这种情况下,最好将逻辑拆分为两个:
第一个使用onDisconnect()
处理程序处理,后者使用.info/connected
值侦听器处理。我已经链接到上面的每个节目指南。