【问题标题】:Error: Firebase.update failed: First argument contains NaN in property错误:Firebase.update 失败:第一个参数在属性中包含 NaN
【发布时间】:2015-01-31 16:26:29
【问题描述】:

我正在制作一个允许用户种植一棵树的网络应用程序。当用户给树施肥时,“肥料”属性应该增加。但是,该应用程序不断给我错误,因为它已确定“肥料”未定义。

更新分数函数如下:

function updateScore(){
    if (usr!=null){
        var tree = $firebase(new Firebase("https://myapp.firebaseio.com/trees/"+usr.treeid));
        var usrTree = tree.$asObject();
        var data = null;
        if (typeof usrTree.data !== 'undefined'){
            data = usrTree.data;
        }
        console.log(usrTree);
        console.log(usrTree.$id);
        console.log(usrTree.uid);
        console.log(usrTree.fertilizer);
        tree.$update({fertilizer: usrTree.fertilizer+1});
        }
    }
}

所以控制台给出了这些结果:

e {$$conf: Object, $id: "-JcDm0UlYVGFfFAX0GSf", $priority: null, $save: function, $remove: function…}
$$conf: Object
$id: "-JcDm0UlYVGFfFAX0GSf"
$priority: null
fertilizer: 0
level: 0
pesticide: 0
sunshine: 0
uid: "simplelogin:6"
water: 0
__proto__: Object

-JcDm0UlYVGFfFAX0GSf

undefined

undefined

我相信第一个是usrTree 对象,第二个是$id,第三个和第四个应该是uidfertilizer,但未定义。但是,在 usrTree 对象中,uidfertilizer 确实按照定义显示并且它们存在于 firebase forge 中:

我在这里做错了什么?我应该怎么做才能更新数据??

【问题讨论】:

    标签: angularjs firebase


    【解决方案1】:

    原来我需要使用 $loaded。我将代码更改为以下代码,它现在可以工作了。

    var tree = $firebase(FirebaseRef.child("trees").child(usr.treeid));
    var usrTree = tree.$asObject();
    usrTree.$loaded().then(function() {
        tree.$update({fertilizer: usrTree.fertilizer + 1});
    }
    

    【讨论】:

    • 您还需要在此处使用transaction 以确保所有并发更新都正确计算。
    猜你喜欢
    • 2016-04-14
    • 2018-10-05
    • 2018-06-19
    • 2018-04-26
    • 1970-01-01
    • 2018-02-22
    • 2015-11-06
    • 2020-04-07
    • 1970-01-01
    相关资源
    最近更新 更多