TLDR:请在JSON-snippet之后滚动到部分;)
我目前正在开发Firebase项目。我正在用JavaScript编写代码。从小时开始,我尝试从/写入对象中提取数据,但出于某种原因,我无法访问它的参数。
最初我的代码如下:
exports.updateUsersNewInterest = functions.database.ref('/category/{categoryID}/interest/{interestID}').onCreate(event =>{
const interestID = event.params.interestID;
const categoryID = event.params.categoryID;
var ref = admin.database().ref("/userInterests/");
ref.once("value").then(function(snapshot){
snapshot.forEach(function(childSnapshot){
var userID = childSnapshot.key;
childSnapshotVal = childSnapshot.val();
var rawSum = childSnapshotVal.rawSum;
var rawCount = childSnapshotVal.rawCount;
var norm = childSnapshotVal.norm;
rawSum[interestID] = 0;
rawCount[interestID] = 0;
var resultObject = {};
resultObject.norm = norm;
resultObject.rawCount = rawCount;
resultObject.rawSum = rawSum;
var ref1 = admin.database().ref("userInterests/"+userID);
return ref1.set(resultObject);
})
return true
})
return true
})
由于某些原因我无法从forEach中的单个childSnapshot对象中读取密钥,我不得不使用另一次尝试:
exports.updateUsersNewInterest = functions.database.ref('/category/{categoryID}/interest/{interestID}').onCreate(event =>{
const interestID = event.params.interestID;
const categoryID = event.params.categoryID;
//console.log(categoryID);
//console.log(interestID);
var ref = admin.database().ref("/userInterests/");
ref.once("value").then(function(snapshot){
var data = snapshot.val();
var keys = Object.keys(data);
console.log(typeof snapshot);
for (var i = 0; i < keys.length; i++){
//At this point I cant access any properties
//console.log(data[i][rawSum] for example is NOT working
// data[i][rawSum][interestID] = 0;
// data[i][rawCount][interestID] = 0;
}
var ref1 = admin.database().ref("userInterests/");
return ref1.set(data);
})
return true
})
现在的问题是,当我尝试在for循环中使用console.log键时,我得到了正确的结果。但是执行与$ data或$ snapshot的属性相关的任何类型的操作(即使var data = snapshot.val()应该给我一个对象?!不起作用。
我可能丢失了一些括号,将代码从sublime复制到此处,但是一般问题保持不变,即使我的代码片段在这里没有完成。
firebase控制台给出了错误:
TypeError: Cannot read property 'rawSum' of undefined at
该对象如下所示:
{ '2wewe':
{ rawCount:
{ '11': 1,
'17': 0,
'18': 0,
'19': 0,
'33': 0,
'35': 0,
'36': 0,
'40': 0 },
rawSum:
{ '11': 1,
'17': 0,
'18': 0,
'19': 0,
...
因此,如果我从Firebase导出快照,然后通过
提取其值var values = snapshot.val()
我应该能够例如用
扭曲它var abc = values[id]['rawCount'][itemID]
或者我错过了什么?
为什么
snapshot.forEach(function(childSnapshot){
var userID = childSnapshot.key;
只是给我“未定义”?
非常感谢我(可能的菜鸟)问题的任何线索。
提前致谢!
答案 0 :(得分:0)
data[i]
应为data[keys[i]]
。但您可以直接循环对象键,而不是调用Object.keys()
:
for (key in data) {
if (data.hasOwnProperty(key)) {
console.log(data[key].rawSum[interestID]);
console.log(data[key].rawCount[interestID]);
}
}