“未捕获的ReferenceError:未定义快照”

时间:2017-01-11 05:39:07

标签: javascript html firebase firebase-realtime-database

//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。我该如何解决这个问题?

1 个答案:

答案 0 :(得分: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);

有了这个,可能更容易理解为什么你不能在最后一行访问snapsnap变量只在回调函数中定义/可用。

即使您在全局声明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);
});