【问题标题】:"Uncaught ReferenceError: snap is not defined"“未捕获的 ReferenceError:未定义快照”
【发布时间】:2017-01-11 22:06:59
【问题描述】:
//creating references
const dbRefObject = firebase.database().ref().child("object");
//syn object changes
dbRefObject.on('value', snap => console.log(snap.val()));
preObject.innerHTML = JSON.stringify(snap.val(), null, 3);
在最后一行,它说snap 没有定义。我该如何解决这个问题?
【问题讨论】:
标签:
javascript
html
firebase
firebase-realtime-database
【解决方案1】:
如果你切换回经典的 JavaScript 表示法,你的代码就等同于他的:
function callback(snap) {
console.log(snap.val())
}
//creating references
const dbRefObject = firebase.database().ref().child("object");
//syn object changes
dbRefObject.on('value', callback);
preObject.innerHTML = JSON.stringify(snap.val(), null, 3);
这样可能更容易理解为什么您不能在最后一行访问snap:snap 变量仅在回调函数中定义/可用。
即使您在全局范围内声明 snap,代码也可以工作,因为回调是异步触发的。因此,您现在调用snap.val() 时,回调(以及此snap)将不可用。
解决方案是将需要访问快照的代码移到回调中:
//creating references
const dbRefObject = firebase.database().ref().child("object");
//syn object changes
dbRefObject.on('value', snap => {
preObject.innerHTML = JSON.stringify(snap.val(), null, 3);
});