我在firebase功能上有问题。我想做的是更新Items的子项时,然后我想获取Count的值并进行进一步的计算,但是我面对的是Firebase日志控制台始终显示错误“ TypeError:无法读取属性'val'的”。
JSON结构
"VTEST" : {
"A" : {
"Count" : 5,
"Items" : {
"item1" : "apple"
},
"NUMBER" : 5
},
"B" : {
"Count" : 8,
"Items" : {
"item1" : "orange;"
},
"NUMBER" : 3
},
"C" : {
"Count" : 10,
"Items" : {
"item1" : "grape"
},
"NUMBER" : 7
},
"D" : {
"Count" : 12,
"Items" : {
"item1" : "grava"
},
"NUMBER" : 10
},
"E" : {
"Count" : 15,
"Items" : {
"item1" : "fish"
},
"NUMBER" : 12
},
"F" : {
"Count" : 18,
"Items" : {
"item1" : "chicken;"
},
"NUMBER" : 8
}
}
我的代码:
exports.ItemCount = functions.database.ref('/VTEST/{ID}/Items').onUpdate((updateRef, context) => {
var childCount = updateRef.after.numChildren();
var newReference = updateRef.after.ref.parent.child('/Count');
var Count = newReference.val();
Count = Count + childCount;
return updateRef.ref.update({Count})
})
我期望的是Count的值将被更新,但是它始终显示错误:“ TypeError:无法读取未定义的属性'val'” 谁能告诉我我在做什么错,我不明白。
答案 0 :(得分:1)
问题来自Reference
没有val()
方法的事实。您需要使用once()
方法来获取相应数据库位置的值。
以下改编的代码应该起作用:
exports.ItemCount = functions.database
.ref('/VTEST/{ID}/Items')
.onUpdate((updateRef, context) => {
var childCount = updateRef.after.numChildren();
var newReference = updateRef.after.ref.parent.child('/Count');
return newReference.once('value').then(dataSnapshot => {
var Count = dataSnapshot.val();
Count = Count + childCount;
return newReference.parent.update({ Count: Count });
});
});
但是,根据您的确切要求,您可以决定使用交易,请参阅https://firebase.google.com/docs/database/web/read-and-write#save_data_as_transactions