【问题标题】:ref.once() not called on Firebaseref.once() 未在 Firebase 上调用
【发布时间】:2016-06-02 21:16:18
【问题描述】:

我对以下问题感到困惑。在制作一个小网页以查看我在 Firebase 上的一些数据时,有些地方我无法访问我想要的内容。 我当然知道服务器上这个地方有东西。这是代码,似乎从未调用过 localRef.once()。

var dbLocalURL = "https://atinytestapp.firebaseio.com/MyList/rc99/";
var localRef = new Firebase(dbLocalURL);
localRef.once("value", function(snapshot) {
    // WE NEVER COME HERE !!!!
    for (record in snapshot.val()) {
        document.write(record)
        var recordRef = new Firebase(dbLocalURL+record+"/");
        recordRef.once("value", function(rcdSnapshot) {
            var rcdData = rcdSnapshot.val();
            document.write(rcdData[“someKey”])
        })
    }
}, function (errorObject) {
    // WE NEVER COME HERE !!!!
    console.log("The read failed: " + errorObject.code);
    document.write("The read failed: " + errorObject.code);
});

我访问数据的页面在任何地方都可以正常工作,除了在一个地方有上述行为。 此外,我还检查了我使用的 URL 是否正确,方法是将其粘贴到浏览器中并查看我期望的数据。 我能错过什么?我希望有人能给我一个提示。

【问题讨论】:

标签: javascript firebase firebase-realtime-database


【解决方案1】:

(注意:这是新的 Firebase 3 方式) 这未包含在问题的代码中,但这里是初始化(为了完整起见)

// Set the configuration for your app: Replace with your project's config object
  var config = {
    apiKey: '<your-api-key>',
    authDomain: '<your-auth-domain>',
    databaseURL: '<your-database-url>',
    storageBucket: '<your-storage-bucket>'
  };
  firebase.initializeApp(config);

  // Get a reference to the database service
  var database = firebase.database();

并假设您只想读取一次数据:

firebase.database().ref('MyList/rc99').once('value').then(function(snapshot) {
    for (record in snapshot.val()) { //unordered records, see comment
       document.write(record)
       ...

Firebase 2

var ref = new Firebase("https://atinytestapp.firebaseio.com/MyList/rc99/");

ref.on("value", function(snapshot) {
  snapshot.forEach(function(record) { //ordered records, see comment
    document.write(record)
    ...
});

注意:确保 url 正确,就好像它格式不正确一样,它根本不起作用。我试过你的网址,它似乎没有响应。

【讨论】:

  • snapshot.forEach()代替for (record in snapshot.val())。后者将维持孩子们的秩序。
  • 我终于解决了同步问题。我并没有像我应该的那样等待事情发生。我不得不与承诺抗争一段时间,现在它起作用了。非常感谢。
  • 可能对某人有用:once('value', function) 吞下了我的错误信息。当我更新到 once('value').then(function) 时,我能够在控制台中看到一条错误消息。
猜你喜欢
  • 1970-01-01
  • 2022-06-24
  • 1970-01-01
  • 1970-01-01
  • 2020-07-12
  • 2018-01-22
  • 2018-02-02
  • 1970-01-01
  • 2016-09-23
相关资源
最近更新 更多