從我在本網站的recent question(在訴諸於「Promise」技術之前),我想出了一個將該變量存儲在Firebase數據庫中的想法,而不是使其成爲javascript中的全局變量,以便我可以在任何函數中使用它(即使在異步函數中)。所以我做了這個代碼:即使Firebase數據中包含內容,它仍會返回未定義值
function logIn(){
\t var loggedUname = $("#loginUname").val();
\t var loggedPword = $("#loginPword").val();
\t
\t var tailorRef = firebase.database().ref('tailors');
\t var keyRef = firebase.database().ref();
\t
\t tailorRef.on('value', function(data){
\t \t data.forEach(function(childData){
\t \t \t if ((loggedUname == childData.val().tUsername) && (loggedPword == childData.val().tPassword)){
\t \t \t \t currentKey = childData.key;
\t \t \t }
\t \t });
\t \t keyRef.update({currentTailor: currentKey});
\t \t alert("key = " + keyRef.currentTailor);
\t });
\t
}
的.update方法是成功的,因爲它保存的登錄用戶對應的按鍵:
但是當我嘗試使用alert檢索它,它說UNDEFINED!我不明白,因爲我假設我是從數據庫的根引用調用的,這和我一樣低。
我試着爲keyRef創建一個獨立的.on()函數,但它仍然是相同的結果。
keyRef.on('value', function(data){
alert(data.currentTailor);
});
難道我叫以錯誤的方式的數據?
我不知道Firebase,但我敢打賭'keyRef.update()'是異步的。 – Barmar
https://firebase.googleblog.com/2016/01/keeping-our-promises-and-callbacks_76.html嘗試使用.then(function(){alert()})方式 – Ayudh
@Barmar我使用.update ()在我的signUp函數中,並且成功地檢索了存儲在這個login()函數中的數據。如果這是你說的話,我不應該能夠在這個功能 – Kaddy03