Angularjs DataSnapshot.val()不';t立即返回处理后的值
这是工厂内的一种方法:Angularjs DataSnapshot.val()不';t立即返回处理后的值,angularjs,firebase,firebase-realtime-database,angularfire,Angularjs,Firebase,Firebase Realtime Database,Angularfire,这是工厂内的一种方法: kbUser.getCurrentUserDetails = function(){ return $rootScope.ref.child("user/" + firebase.auth().currentUser.uid).once('value', function(snap){ return snap.val(); }); } 我在控制器中调用此方法,如下所示: return kbUser.getCurrentUserDetail
kbUser.getCurrentUserDetails = function(){
return $rootScope.ref.child("user/" + firebase.auth().currentUser.uid).once('value', function(snap){
return snap.val();
});
}
我在控制器中调用此方法,如下所示:
return kbUser.getCurrentUserDetails().then(function(details){
// Here I need to do .val() once again
for (var attrname in details.val()) { kbUser.userObject.details[attrname] = details.val()[attrname]; }
kbUser.copyFirebaseDataToUser(firebaseUser).then(function(){
return true;
});
});
这就是我得到的返回:details=W{A:p,W:U,g:ve}
,它与我的数据库不对应
当我在这里读取details
变量时,我必须再次执行details.val()
,以从数据库中获取所需的JSON对象。我不明白为什么方法中没有返回snap.val()
的结果,而只返回“原始”firebase datasnapshotsnap
。有人知道为什么会这样吗
假设工厂设置正确。基本上,您需要使用chain promise,以便在
snap.val()
返回时,您可以获取其中的数据
kbUser.getCurrentUserDetails().then(function(data){
var user = data;
});
实际上我已经在做了。我在最初的帖子中添加了调用函数的实际方式。