无法访问firebase里面的变量gotData()函数

时间:2018-03-17 14:19:57

标签: javascript firebase firebase-realtime-database

我想在下面提到的代码的最后一行获取power_level值的值,但它没有显示任何内容。我需要这个值来进一步使用该做什么。

var config = {
    //
};
firebase.initializeApp(config);
var database = firebase.database();
var ref = database.ref("power");
ref.on("value", gotData, errData);

var power_level;

function gotData(data) {
    var power = data.val();
    // Grab the keys to iterate over the object
    var keys = Object.keys(power);
    console.log(keys);
    for (var i = keys.length - 1; i < keys.length; i++) {
        var key = keys[i];
        // Look at each fruit object!
        var power_level = power[key];
        console.log(power_level);
    }
}
console.log(power_level);

1 个答案:

答案 0 :(得分:0)

你没有在最后一行获得值的原因是因为它是异步的。基本上你执行ref.on并运行gotData()函数if(更重要的是WHEN)它成功,但无论console.log()是否完成,你的最后gotData()都会运行。< / p>

一种简单的方法是通过定义一个单独的函数,该函数将power_level作为参数并处理power_level,并在gotData()的末尾运行。

这样的事情:

var config = {
//
 };
firebase.initializeApp(config);
var database = firebase.database();
var ref = database.ref("power");
ref.on("value", gotData, errData);

var power_level;
function gotData(data) {
var power = data.val();
// Grab the keys to iterate over the object
var keys = Object.keys(power);
console.log(keys);
for (var i = keys.length-1; i < keys.length; i++) {
var key = keys[i];
// Look at each fruit object!
var power_level = power[key];
console.log(power_level);

////////// call handlePowerlevel here to handle logic further
handlePowerlevel(power_level)
}
}

function handlePowerlevel(pl) {
  console.log(pl);
  // actual logic
}