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

如何在firebase的javascript中使局部变量成为全局变量?,javascript,global-variables,firebase,Javascript,Global Variables,Firebase,我想通过firebase api提取一个值,并将其作为全局变量,以便在代码中的其他地方引用它 我希望下面的代码能够在我从firebase中提取一个值并可以在函数()之外使用它的情况下工作 我试着用下面的var来定义它,但运气不好() 我还尝试将其定义为一个没有运气的函数: 您应该在$(document).ready(function() 使用异步编程,您只能在回调内部或在从那里调用并将数据传递给的函数中使用响应。您不能将其填充到全局变量中,以尝试绕过响应是异步的这一事实。您也不能从异步回调返回值

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

我希望下面的代码能够在我从firebase中提取一个值并可以在函数()之外使用它的情况下工作

我试着用下面的var来定义它,但运气不好()

我还尝试将其定义为一个没有运气的函数:


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


使用异步编程,您只能在回调内部或在从那里调用并将数据传递给的函数中使用响应。您不能将其填充到全局变量中,以尝试绕过响应是异步的这一事实。您也不能从异步回调返回值,并期望返回该值从主机函数。主机函数已完成执行,回调将在一段时间后调用

以下是一种可行的方法:

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

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

要了解更多关于处理异步响应的选项,您可以阅读以下关于ajax调用的答案,但概念是一样的:。

在这种情况下您不需要。请参阅和
ref.on
是一个异步操作。在此处尝试:。有没有办法不使其异步?@Chris否。异步是异步的,必须这样使用。这实际上是一件好事(在浏览器JavaScript中),尽管有点难以习惯。使用承诺可以大大简化逻辑:但它们只是伪装的回调。
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);
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());
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);
});
var ref = new Firebase('https://helloworldtest.firebaseIO.com/');

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