0

這可能會遇到很簡單的問題,但我已經與Angular碰到了很多問題,我需要一些解釋。我所要做的就是在快照函數之外獲得一個變量值。如果我可以做這樣的事情快照之外的變量firebase Angular

let testVariable : string; 

var testCount = firebase.database().ref('users/' + userName + '/userName'); 

testCount.on('value', function (snapshot) { 

testVariable = snapshot.val(); 


}); 

alert(testVariable); //comes out undefined 

謝謝

回答

0

問題是你的代碼是異步運行。這意味着javascript將調用firebase並立即調用alert函數,而無需等待任何響應。您的警報必須置於回調中,或者在設置變量後調用。

如果您使用「this」,則可能在訪問此功能時遇到問題。如果是這樣,該函數的語法改變這樣的箭頭:

testCount.on('value', (snapshot) => { 

    this.testVariable = snapshot.val(); 


}); 
+0

這是否意味着,如果我叫警報(testVariable)別的地方比它不會是不確定的,因爲它會再有變數?我可以把警報放在哪裏?你能否向我解釋一下這個回調,我嘗試過查找它,但是我找不到足夠具體的東西。 –

+0

在你的函數中運行testCount。此函數運行(從firebase獲取答案),然後觸發回調函數(快照函數)。回調是,基本上,當我們告訴js在做下一件事之前等待其他事情發生。嘗試將alert()函數移動到testVariable = snapshot.val()之下。 – Notmfb

+0

這是我的問題。我需要使用navController.push,但它在testCount內部不起作用(稱其未定義),但在其外部工作。我發現有很多代碼不能放入該函數,因此如果可能的話,我需要一種方法來使用變量值。如果我直接在它下面設置它,那將會在testCount –