如何使用firebase在javascript中使局部变量成为全局变量?

时间:2014-10-30 01:31:50

标签: javascript global-variables firebase

我想通过firebase api获取一个值并使其成为一个全局变量,以便我可以在代码中的其他地方引用它

我希望以下代码能够在我从firebase中提取值并在函数外部使用它(http://jsfiddle.net/chrisguzman/jb4qLxtb/

var ref = new Firebase('https://helloworldtest.firebaseIO.com/');

ref.on('value', function (snapshot) {
    var Variable = snapshot.child("text").val();
    return Variable;
});

alert(Variable);

我尝试使用var定义它,但没有运气(http://jsfiddle.net/chrisguzman/jb4qLxtb/1/

var ref = new Firebase('https://helloworldtest.firebaseIO.com/');

var MyVariable = ref.on('value', function (snapshot) {
    var Variable = snapshot.child("text").val();
    return Variable;
});


alert(MyVariable);

我还尝试将其定义为没有运气的函数:http://jsfiddle.net/chrisguzman/jb4qLxtb/2/

var ref = new Firebase('https://helloworldtest.firebaseIO.com/');

function myFunction() { ref.on('value', function (snapshot) {
    var Variable = snapshot.child("text").val();
    return Variable;
});};


alert(myFunction());

2 个答案:

答案 0 :(得分:1)

使用异步编程,您只能使用回调内部或您从那里调用的函数中的响应并将数据传递给。您不能将其填充到全局变量中以尝试解决响应异步的问题。您也无法从异步回调中返回值,并期望从主机函数返回该值。主机功能已经完成执行,并且稍后会调用回调。

这是一种可行的方式:

var ref = new Firebase('https://helloworldtest.firebaseIO.com/');

ref.on('value', function (snapshot) {
    var Variable = snapshot.child("text").val();
    alert(Variable);
});

要阅读有关处理异步响应的选项的更多信息,您可以阅读这个关于ajax调用的答案,但概念是相同的:How do I return the response from an asynchronous call?

答案 1 :(得分:-1)

您应该在$( document ).ready(function()

之外声明全局变量
var MyVariable = '';
$( document ).ready(function() {
var ref = new Firebase('https://helloworldtest.firebaseIO.com/');

MyVariable = ref.on('value', function (snapshot) {
    var Variable = snapshot.child("text").val();
    return Variable;
});


alert(MyVariable);
});