【问题标题】:Firebase: Database reference 'on' method not running callback (javascript)Firebase:数据库引用“on”方法未运行回调(javascript)
【发布时间】:2017-05-28 07:06:07
【问题描述】:

我正在调整对可能不存在的数据的查询。在这种情况下,回调不会运行。正如我从文档中了解到的那样,它应该运行并且 snapshot.val() 应该为空,不是吗?

这里有一个精简的例子:http://surfmaps.eu/trombone/case.html

回调里面有一个console.log没有被执行。

我错过了什么吗?

再见,谢谢,路易斯

代码:

function getData(id) {
    var ref=firebase.database().ref("support/"+id); 
    console.log("In getData, looking for ",ref);

    // get support data from firebase
    ref.on('value',function (snapshot) {
        console.log("In Value");
        console.log(snapshot);
    });

    console.log("end getData, looking for ",ref);

}

// on startup
getData("abc");

【问题讨论】:

  • 代码似乎对我有用。哪个console.log 没有被解雇?

标签: javascript firebase firebase-realtime-database


【解决方案1】:

您没有读取数据的权限。要查看这一点,您可以附加一个完成侦听器并记录它给您的错误:

var ref=firebase.database().ref("support/"+id); 
console.log("In getData, looking for ",ref);

// get support data from firebase
ref.on('value',function (snapshot) {
    console.log("In Value");
    console.log(snapshot);
}, function(error) {
    console.error(error);
});

console.log("end getData, looking for ",ref);

这样做表明:

错误:permission_denied at /support/abc:客户端无权访问所需数据。

【讨论】:

  • 我一直在寻找一些错误回调,但没有意识到有一个,即使在阅读了文档之后。事实上,这个回调显示为“cancelCallbackOrContext”,这似乎有点误导。谢谢!
  • 当你没有读取权限时,监听器被取消——因此它的名字。但确实应该有一些关于它的文档。不知道去哪儿了。
【解决方案2】:

使用

function(error) {
console.error(error);

找到错误。应该是因为

错误:permission_denied at /react: 客户端没有权限 访问所需的数据。

通过转到实时数据库 -> 规则 -> 将读取和写入从 false 更改为 true。

【讨论】:

    【解决方案3】:

    请参阅Firebase Rules,您无权访问 Firebase 数据库集合。

    转到 Firebase 控制台、数据库、要更新的规则:

    {
      "support{
        ".read": true, // allow read
        ".write": false
      }
    }
    

    【讨论】:

    • 我坚持了几乎一整天,而你救了我的命。
    猜你喜欢
    • 1970-01-01
    • 2017-10-29
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多