gpt4 book ai didi

javascript - Firebase 函数 getChild 值

转载 作者:行者123 更新时间:2023-12-02 23:46:18 29 4
gpt4 key购买 nike

我在 firebase 函数上遇到问题。我想做的是当 Items 的子项更新时,然后我想获取 Count 的值并进行进一步计算,但我面临的是 firebase 日志控制台总是显示错误“TypeError: Cannot read property '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})
})

我期望的是计数的值将被更新,但它总是显示错误:“TypeError:无法读取未定义的属性'val'”谁能告诉我我在这里做错了什么,我不明白。

最佳答案

问题来自于 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

关于javascript - Firebase 函数 getChild 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55847699/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com