我希望在数据从firebase返回后执行操作,然后使用$ bind返回的promise。但是,当使用$ bind创建一个promise时,“then”函数将在从firebase返回数据之前运行。
多个$绑定只会导致数据从firebase返回后第一个“then”运行,但只有在我没有绑定到对象时才会这样。
在数据可用后,在firebase中的对象上运行$ bind的“then”似乎永远不会返回。
angular.module('myApp', ['firebase'])
.controller('HomeCtrl', ['$scope', '$rootScope', '$firebase',
function($scope, $rootScope, $firebase) {
// Data 1
// The first bind's then will fire correctly
$scope.data1 = $firebase(new Firebase("https://bindTest.firebaseio.com/users/1/email"));
$scope.data1.$bind($scope, "data1Remote").then(function() {
console.log("data1Remote: then");
console.log($scope.data1Remote);
$scope.data1RemoteThen = angular.copy($scope.data1Remote);
});
console.log("data1Remote: not then");
console.log($scope.data1Remote);
// Data 2
// The then function doesn't seem to work at all if it references an object
$scope.data2 = $firebase(new Firebase("https://bindTest.firebaseio.com/users/1"));
$scope.data2.$bind($scope, "data2Remote").then(function() {
console.log("data2Remote: then");
console.log($scope.data2Remote);
$scope.data2RemoteThen = angular.copy($scope.data2Remote);
});
console.log("data1Remote: not then");
console.log($scope.data1Remote);
// Data 3
// Since this section follows another bind the then doesn't work.
$scope.data3 = $firebase(new Firebase("https://bindTest.firebaseio.com/syncedValue"));
$scope.data3.$bind($scope, "data3Remote").then(function() {
console.log("data3Remote: then");
console.log($scope.data3Remote);
$scope.data3RemoteThen = angular.copy($scope.data3Remote);
});
console.log("data2Remote: not then");
console.log($scope.data1Remote);
}
]);
除非我遗漏了某些东西,否则“then”函数应该只在firebase将其数据绑定到范围后运行。我创建了一个说明此问题的Plunker。尝试以不同的组合注释掉不同的数据部分,您会注意到正确返回的“thens”也会发生变化。有没有其他人经历过/找到这个问题的解决方案?感谢。
答案 0 :(得分:0)
事实证明这是一个错误。我报告了它和Anant超快速地修复它。真棒。该修复程序应用于angularFire github的主分支。