Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs DataSnapshot.val()不';t立即返回处理后的值_Angularjs_Firebase_Firebase Realtime Database_Angularfire - Fatal编程技术网

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 datasnapshot
snap
。有人知道为什么会这样吗


假设工厂设置正确。

基本上,您需要使用chain promise,以便在
snap.val()
返回时,您可以获取其中的数据

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

实际上我已经在做了。我在最初的帖子中添加了调用函数的实际方式。