这是工厂内的一种方法:
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()
的结果不会在方法中返回,而只是'raw'firebase数据快照snap
。有人知道为什么会这样吗?
假设工厂设置正确。
答案 0 :(得分:1)
基本上你需要使用链承诺,以便当snap.val()
返回时你可以获得数据。
kbUser.getCurrentUserDetails().then(function(data){
var user = data;
});