首页 > 解决方案 > Vue 和 Firebase RTDB 连接

问题描述

我遵循了几个不同的教程,阅读了许多关于 SO 的帖子,但我的 firebase RTDB 仍然无法连接。它甚至不会抛出任何错误。

此时我在db/database.js中的文件看起来像这样(我从连接数据中剥离了它):

 
const firebaseConfig = {
   apiKey: "key",
   authDomain: "",
   databaseURL: "https://database_name.europe-west1.firebasedatabase.app",
   projectId: "",
   storageBucket: "",
   messagingSenderId: "",
   appId: ""
 };


 firebase.initializeApp(firebaseConfig);
 const firebaseDb = firebase.database()

 export default firebaseDb

我用来调用store/index.js中的数据库引用的方法

dbReadSettings() {
    console.log("I'm here");
    let settings = firebaseDb.ref('userSettings/', function(error) { console.log(error) });
            settings.on('value', (snapshot) => {
                const data = snapshot.val();
                console.log(data)
            }, function(error) {
                console.log(error) })
        }

结果是没有 -控制台注销我在这里”然后没有别的(我尝试了许多不同的方法)。我检查了路径和文档,但它根本没有连接。有什么帮助吗?

标签: javascriptfirebasevue.jsfirebase-realtime-database

解决方案


您拥有的第一个回调是不需要的,实际上永远不会被调用。由于您将侦听器附加到该回调中,因此永远不会附加侦听器。

您可以通过添加额外的日志行轻松检查这一点:

console.log("I'm here");
let settings = firebaseDb.ref('userSettings/', function(error) { console.log(error) });
    console.log("Now I'm here");
    settings.on('value', (snapshot) => {
        const data = snapshot.val();
        console.log(data)
    }, function(error) {
        console.log(error);
    });
})

虽然你会看到:

我在这

你永远不会看到:

我现在就在这

要解决此问题,请删除无关的回调并在创建引用后立即附加侦听器(这不是异步操作):

console.log("I'm here");
let settings = firebaseDb.ref('userSettings/')console.log(error) });
settings.on('value', (snapshot) => {
    const data = snapshot.val();
    console.log(data)
}, function(error) {
    console.log(error);
});

推荐阅读