首页 > 解决方案 > Firebase 数据库没有响应

问题描述

我不知道为什么,但我的代码不起作用。我想在我的网页中使用 Firebase 实时数据库,但是一旦我添加了 Firebase 的东西,执行我的代码就不再做任何事情了。Chrome 没有在我的代码中发现任何错误。你能告诉我,为什么它不起作用。我做错什么了吗?

非常感谢,尼康

PS:我把代码中的API Key换成了“|” 所以你看不到我的 API 密钥 :)

我在 Chrome 和 W3Schools 的 Tryit 编辑器中执行了我的代码。此外,我尝试了很多次更改代码,但没有办法让我达到目标。

<script src="https://www.gstatic.com/firebasejs/6.6.0/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/6.6.0/firebase-database.js">
  var config = {
    apiKey: "|||||||||||||||||||||||||||||||||||||",
    authDomain: "littleappsdatabase.firebaseapp.com",
    databaseURL: "https://littleappsdatabase.firebaseio.com",
    storageBucket: "littleappsdatabase.appspot.com"
  };
  firebase.initializeApp(config);
  var database = firebase.database();
  function getTermine () {
    firebase.database()
      .ref('/users/' + userId)
      .once('value')
      .then(function(snapshot) { 
        var termine = (snapshot.val() && snapshot.val().calendar) || 'Keine Termine vorhanden';
      });

    return (termine);
  }
  var list = getTermine();
  document.write('<h4>', list.replace(';', '<br><br>'), '</h4>');
</script>

我认为它显示给定标签的值可能会有延迟。

标签: javascripthtmlfirebasefirebase-realtime-database

解决方案


我已经编辑了您的问题以正确格式化您的代码。现在您可以清楚地看到您termine在外部函数中返回了一个未定义的变量getTermine()。这显然不会包含您正在寻找的结果。

此外,我怀疑您正在运行的代码是异步的,因此您不能以同步的方式返回值。但是,您可以创建一个回调函数,该函数在值可用时立即调用。像这样:

function getTermine(callback) {
  firebase.database()
    .ref('/users/' + userId)
    .once('value')
    .then(function(snapshot) { 
      var termine = (snapshot.val() && snapshot.val().calendar) || 'Keine Termine vorhanden';
      callback(termine);
    });
}

getTermine(function(list) {
  document.write('<h4>', list.replace(';', '<br><br>'), '</h4>');
);

希望有帮助。工作时请注意代码的布局,因为正确缩进代码时很容易发现这些错误。


推荐阅读