DataSnapshot.val()不会立即返回已处理的值

时间:2016-07-15 22:15:15

标签: 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.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。有人知道为什么会这样吗?

假设工厂设置正确。

1 个答案:

答案 0 :(得分:1)

基本上你需要使用链承诺,以便当snap.val()返回时你可以获得数据。

kbUser.getCurrentUserDetails().then(function(data){
  var user = data;
});