2014-10-30 147 views
2

我想通過firebase API拉一個值,並使其成爲一個全局變量,以便我可以參考它在代碼中的其他位置如何在JavaScript中使用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()); 
+0

你*不*在這種情況下。請參閱http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call和http://stackoverflow.com/questions/500431/what-is-the-scope -of-variables-in-javascript – user2864740 2014-10-30 01:36:42

回答

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

你應該之外的$(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); 
}); 
+2

'ref.on'是一個異步操作。 – user2864740 2014-10-30 01:37:27

+0

試過這裏:http://jsfiddle.net/chrisguzman/jb4qLxtb/3/。有沒有辦法讓它不同步? – Chris 2014-10-30 01:37:44

+0

@Chris號異步是異步的,必須如此使用。這實際上是一件好事(在瀏覽器JavaScript中),儘管要習慣它有點難。使用Promise可以極大地簡化邏輯:但它們只是變相的回調。 – user2864740 2014-10-30 01:40:19