【问题标题】:Firebase database returns null; upon refresh, it returns correct valueFirebase 数据库返回 null;刷新时,它返回正确的值
【发布时间】:2018-01-31 15:45:56
【问题描述】:

我搜索了现有的讨论但无济于事,所以我想向社区寻求帮助:我正在使用 JavaScript 从 Firebase 数据库中获取数据。初始提取效果很好;但是,当我向数据库添加一个孩子时,我的 JavaScript 网页最初将新的孩子数据接收为“null”。奇怪的是,如果我刷新网页,“null”会被正确的数据替换。

这是我的网页来源:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Reading Firebase Database</title>
        <script type="text/javascript" src="../d3.js"></script>
        <style type="text/css">
            /* No style rules here yet */       
        </style>
    </head>
    <body>

    <div id="div1">
    </div>

        <script src="https://www.gstatic.com/firebasejs/4.9.0/firebase.js"></script>
        <script>

            // Initialize Firebase
            var config = {
                apiKey: confidential,
                authDomain: confidential,
                databaseURL: confidential,
                projectId: confidential,
                storageBucket: confidential,
                messagingSenderId: "confidential"
            };
            firebase.initializeApp(config);

            // Read Firebase Data
            var database = firebase.database().ref().child("session");
            database.on("child_added", snap => {
            var dur = snap.child("dur").val();
            var lat = snap.child("lat").val();
            var lon = snap.child("lon").val();

            // Display Firebase Data
            var para = document.createElement("p");
            var node = document.createTextNode(lon);
            para.appendChild(node);
            var element = document.getElementById("div1");
            element.appendChild(para);

            });

        </script>

    </body>
</html>

这里是 Firebase 大纲:

提前感谢您的帮助。我真的很感激。

【问题讨论】:

  • 应该可以。您是否尝试过使用session 作为参考? var database = firebase.database().ref("session");
  • 恐怕没用。
  • 添加新孩子时我也会遇到同样的情况。数据在刷新页面后出现。所以我必须使用on('value') 函数和child_added

标签: javascript firebase firebase-realtime-database


【解决方案1】:

您必须使用on('value') 函数来获取每个 child 的值。因此,每当添加新的孩子时,on('value') 都会为 firebase 中的每个孩子运行。

var database = firebase.database().ref().child("session");
database.on("value", snap => {
    snap.forEach(snapshot => {
        if ChildKey == newKey {
            console.log(snapshot.val())
        }
    })
});

【讨论】:

  • 非常感谢!
猜你喜欢
  • 2019-08-05
  • 2020-08-20
  • 2019-05-15
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 2022-12-14
相关资源
最近更新 更多