如何在 AngularFire 中返回异步函数结果
2016-04-24
133
我已经创建了以下服务。
app.factory('userProfileFactory', ['FBDB', 'searchParam', function(FBDB, searchParam) {
var personalKey;
return {
userProfile: function() {
var FBref = new Firebase(FBDB).child('items');
FBref.orderByChild('first')
.startAt(searchParam)
.endAt(searchParam)
.once('value', function (snapshot) {
var data = snapshot.val();
personalKey = Object.keys(data)[0];
return(personalKey);
});
return(personalKey);
}
};
}]);
但是,当我尝试在下面的控制器中获取 personalKey 值的结果时,我得到了“未定义”:
app.controller('profileCtrl', ['userProfileFactory', function(userProfileFactory) {
console.log(userProfileFactory.userProfile())
}]);
请提供建议:)
1个回答
是的,您可以在尝试以异步方式获取数据的地方创建一个自定义承诺,方法是借助
$q
userProfile: function() {
var deferred = $q.defer();
var FBref = new Firebase(FBDB).child('items');
var promise = FBref.orderByChild('first')
.startAt(searchParam)
.endAt(searchParam)
.on('value', function(snapshot) {
var data = snapshot.val();
personalKey = Object.keys(data)[0];
deferred.resolve(personalKey);
});
return deferred.promise
}
然后控制器将使用
.then
函数调用工厂函数来链接承诺。
app.controller('profileCtrl', ['userProfileFactory', function(userProfileFactory) {
userProfileFactory.userProfile().then(function(res){
console.log(res);
})
}]);
Pankaj Parkar
2016-04-24