Firebase数据快照返回key,但不返回.val()
Firebase data snapshot returns key but no .val()
我有以下数据,其中查询user/(userID)/(topic)的值返回null:
{
"topic" : {
"cafe" : {
"-KWoHbBXzWlD8aHBjg6Z" : {
"count" : 0,
"id" : "00qMXXXeYkbCbmjajoe4XZeIPuo1",
"text" : "A new message",
"time" : "2016-11-17T21:56:26.036Z"
},
"-KWpBzT83S_RB3wVwZ2u" : {
"count" : 3,
"id" : "zTSpSTqyRcaJf0MlYl15gBnvYdj2",
"text" : "Hello",
"time" : "2016-11-18T02:11:29.818Z"
}
},
"pomodoro" : {
"-KWoJhC9V1mLznt7jGwF" : {
"count" : 3,
"id" : "00qMXXXeYkbCbmjajoe4XZeIPuo1",
"text" : "Tomato! #tomato",
"time" : "2016-11-17T22:05:34.933Z"
}
}
},
"user" : {
"00qMXXXeYkbCbmjajoe4XZeIPuo1" : {
"pomodoro" : "2016-11-18T14:20:32.800Z"
},
"zTSpSTqyRcaJf0MlYl15gBnvYdj2" : {
"cafe" : "2016-11-18T14:24:32.968Z"
}
}
}
相关代码如下:
// inside the constructor
this.database = firebase.database().ref()
//relevant function
databaseListenerOn = () => {
// does not work correctly
let userPath = `user/${this.props.userID}/${this.state.topic}`
this.database.child(userPath).on('value', data => {
this.setState({time: data.val()})
console.log(data.key)
console.log(data.val())
})
//works correctly
let messagePath = `topic/${this.state.topic}`
this.database.child(messagePath).on('value', data => {
let messages = []
data.forEach(message => {
messages.push({
count: message.val().count,
id: message.val().id,
key: message.key,
text: message.val().text,
time: message.val().time
})
})
this.setState({messages: this.state.messages.cloneWithRows(messages)})
})
}
logging data.key
正确返回'cafe'或'pomodoro'。但是,data.val()
返回null,我无法访问字符串时间戳。
使用类似的代码,我能够成功访问data.val()
返回对象的其他数据,所以我对我可能做错的事情感到困惑。我在这个网站和谷歌小组上看过类似的问题,但没有找到适合我特殊情况的答案。
问题是,我没有等待Firebase返回userID之前运行我的查询:
// this.props.userID is undefined
let userPath = `user/${this.props.userID}/${this.state.topic}`
解决方案是在onAuthStateChanged
中调用this.databaseListenerOn()
,以确保一旦我有userID就调用它。
相关文章:
- .val()不返回输入文本
- .val()返回未定义的.text返回随机代码
- jQuery.val()未返回预期值
- jQuery val() 返回一个在 select/option 元素上带有 IE8 的数组
- jquery.val()未返回正确的值
- iPhone iOS上的val()未返回textarea值
- $(this).val() 返回不正确的值 IE8
- select.val 返回数组中的未定义
- 当字段为空时,val() 返回占位符值,而不是 IE8,9 中的实际值.下面显示的
- 单选按钮 .val() 返回不为空的值,即使未选择任何单选按钮
- 在 jQuery 中使用 val() 返回数组的特定索引
- $('#textboxId').val() 返回旧值(浏览器缓存问题)
- JQuery val()、text() 和 html() 都返回一个空字符串
- 在返回 undefined 的元素上调用 .val(date_select
- 使用 $('#id').val() 不会返回下拉列表的选定值
- 接受 (#id).val() 的 JavaScript 函数返回错误的值
- Javascript's.value和jquery's.val()函数返回错误的值..但仅在移动设备上
- Firebase数据快照返回key,但不返回.val()
- ““在line.map(函数(){返回$ ().val ();}) . get()
- 什么是代码返回val+''===numVal+''为了