我想通过firebaseapi提取一个值,并将其作为全局变量,这样我就可以在代码中的其他位置引用它
我希望下面的代码能在我从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());
使用异步编程,您只能在回调内部或从那里调用的函数中使用响应并将数据传递给它。您不能将其填充到全局变量中以试图绕过响应是异步的这一事实。您也不能从异步回调返回值,并期望该值从宿主函数返回。主机函数已经完成执行,稍后将调用回调。
这是一种可行的方法:
var ref = new Firebase('https://helloworldtest.firebaseIO.com/');
ref.on('value', function (snapshot) {
var Variable = snapshot.child("text").val();
alert(Variable);
});
要了解更多关于处理异步响应的选项,您可以阅读这个关于ajax调用的答案,但概念是一样的:如何从异步调用返回响应?。
您应该在$( 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);
});