【问题标题】:"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 没有定义。我该如何解决这个问题?

【问题讨论】:

  • 欢迎来到 SO。请访问help center 了解如何询问以及询问什么。提示:发布minimal reproducible example 而不是一些任意代码和修复需求。除非它是已定义的 html 字段,否则 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);

这样可能更容易理解为什么您不能在最后一行访问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);
});

【讨论】:

    猜你喜欢
    • 2023-01-23
    • 2016-11-03
    • 2011-01-05
    • 2016-01-02
    • 2013-10-06
    • 2016-12-17
    • 1970-01-01
    相关资源
    最近更新 更多