【发布时间】:2014-12-26 15:02:11
【问题描述】:
我有一个表单,只有当用户提供有效的访问密钥 ($scope.access_key) 时我才希望发送该表单 - 每个密钥只能使用一次。
在我的控制器中,我有以下方法:
$scope.verifyAccess = function() {
var ref = new Firebase(FBURL+'/keys');
var sync = $firebase(ref);
$scope.keys = sync.$asArray();
var success = false;
$scope.keys.$loaded( function(KEYS) {
for( var i = 0; i < KEYS.length; i++ ) {
var e = KEYS[i];
console.log(e.key + " " + e.used);
if( e.key === $scope.access_key && e.used == false ) {
e.used = true;
$scope.keys.$save(i);
success = true;
break;
}
}
if( success ) {
console.log("success");
return true;
} else {
console.log("failure");
return false;
}
});
}
然后我像这样使用它:
$scope.addSurvey = function() {
if( $scope.verifyAccess() ) {
// do something
alert("OK");
}
};
当我调用$scope.addSurvey() 时,我在日志中看到“成功”(并且数据库已正确修改),但alert("OK") 没有触发。
如果我不使用$loaded,方法会立即返回并且不会等待数据被加载和处理。另一方面,如果我使用$loaded,它似乎根本没有返回任何东西。
我做错了什么?
【问题讨论】:
-
基南拥有它的权利。除了他的回答,请参阅以下内容:stackoverflow.com/questions/27049342/…、stackoverflow.com/questions/26268446/…、stackoverflow.com/questions/26297654/… 可能还有其他一些。
标签: javascript angularjs firebase angularfire