Firebase - 变量超出范围

时间:2015-11-19 15:09:15

标签: javascript scope console firebase

请原谅我,如果这是一个业余问题,我是使用API​​的新手。我一直在与Firebase合作存储一个"分数"在我的脚本中使用的list数组。在其中一个Firebase函数中,值已更新,但该值未在全局范围内更新。我不确定此时我失踪了什么。这是一段代码片段,0和1的值记录在控制台上。

window.global_counter = 0;
window.score = 0;
window.listScores = {"GMS":0, "Vacc":0, "CH":0, "GSF":0, "Pharm":0, "GF":0, "Pharma":0, "Sti":0};

var ref = new Firebase("https://xxx-xxx-xxx-xxx.firebaseio.com/");

// show chart data 
ref.on("value", function(snapshot){
    listScores["GMS"] = snapshot.child("GMS").numChildren();
    console.log("listScores['GMS'] inside: " + listScores["GMS"]);
    // 1
    listScores["Vacc"] = snapshot.child("Vacc").numChildren();
    listScores["CH"] = snapshot.child("CH").numChildren();
    listScores["GSF"] = snapshot.child("GSF").numChildren();
    listScores["Pharm"] = snapshot.child("Pharm").numChildren();
    listScores["GF"] = snapshot.child("GF").numChildren();
    listScores["Pharma"] = snapshot.child("Pharma").numChildren();
    listScores["Sti"] = snapshot.child("Sti").numChildren();
});

console.log("listScores['GMS'] outside: " + listScores["GMS"]);
// 0

1 个答案:

答案 0 :(得分:1)

这不是每个人说的范围问题。 Firebase异步返回数据。

Firebase通过网络下载数据。它以异步方式执行此操作,因此不会阻止UI活动。最终将下载,但不会在您在脚本中记录时。

您可以使用一些选项来处理异步数据。

  1. .on()函数中执行所有逻辑。
  2. 使用可观察或其他类似Angular+AngularFire的框架来简化异步数据。