从Firebase回调分配值

时间:2018-09-19 16:11:07

标签: javascript firebase firebase-realtime-database

我想访问我的Firebase数据库,检索一个值,然后将其分配给一个变量,以供以后在代码中使用。

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

var config = {
    apiKey: "",
    authDomain: "",
    databaseURL: "",
    projectId: "",
    storageBucket: "",
    messagingSenderId: ""
  };

firebase.initializeApp(config);
database=firebase.database();
var ref = database.ref('test');
var firebaseMsg ='';

ref.on('value',function(snap){
//console.log(snap.val());
firebaseMsg=snap.val();
});

console.log(firebaseMsg);

我的firebase数据库如下:

    {
  "test" : "Hello from my database!"
}

控制台日志生成一个空字符串,看来ref.on回调中的分配无效。

1 个答案:

答案 0 :(得分:1)

发生这种情况是因为对Firebase数据库的查询是异步的:您的console.log()之前执行,并返回由on()方法返回的回调函数。

以下将起作用:

ref.on('value',function(snap){
   //console.log(snap.val());
   firebaseMsg=snap.val();
   console.log(firebaseMsg);
});

您可能已经注意到,因为您注释掉了console.log(snap.val());行。

这意味着,例如,您只能从回调函数中更新应用程序UI(以反映数据库中的更改)。