【问题标题】:DataSnapshot.val() doesn't return processed value immediatelyDataSnapshot.val() 不会立即返回处理后的值
【发布时间】:2016-07-15 22:15:14
【问题描述】:

这是工厂中的一个方法:

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 数据快照snap。有人知道为什么会这样吗?

假设工厂设置正确。

【问题讨论】:

    标签: angularjs firebase firebase-realtime-database angularfire


    【解决方案1】:

    基本上你需要使用链式promise,这样当snap.val()得到返回时你就可以得到里面的数据。

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

    【讨论】:

    • 我实际上已经这样做了。我在最初的帖子中添加了调用函数的实际方式。
    猜你喜欢
    • 2018-05-29
    • 2017-12-11
    • 2013-01-31
    • 2021-01-07
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多