2017-08-08 56 views
0

從我在本網站的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方法是成功的,因爲它保存的登錄用戶對應的按鍵:

the updated database

但是當我嘗試使用alert檢索它,它說UNDEFINED!我不明白,因爲我假設我是從數據庫的根引用調用的,這和我一樣低。

我試着爲keyRef創建一個獨立的.on()函數,但它仍然是相同的結果。

keyRef.on('value', function(data){ 
 
    alert(data.currentTailor); 
 
});

難道我叫以錯誤的方式的數據?

+0

我不知道Firebase,但我敢打賭'keyRef.update()'是異步的。 – Barmar

+0

https://firebase.googleblog.com/2016/01/keeping-our-promises-and-callbacks_76.html嘗試使用.then(function(){alert()})方式 – Ayudh

+0

@Barmar我使用.update ()在我的signUp函數中,並且成功地檢索了存儲在這個login()函數中的數據。如果這是你說的話,我不應該能夠在這個功能 – Kaddy03

回答

0

正確的方法是:

keyRef.on('value', function(data){ 
// alert(data.val().currentTailor); see the difference 
    console.log('currentTailor ==>', data.val().currentTailor); 
}); 

alert()在javascript不推薦,因爲它凍結你的頁面。改用控制檯。這樣你就可以看到你的日誌在瀏覽器的控制檯(在Chrome中按下Ctrl鍵++Ĵ

火力地堡上的()方法returns the callback function。要獲取數據對象,必須對該返回值使用val()方法。然後你可以使用相應的鍵獲得任何值。

keyRef.on('value', function(data){ 
// here data is callback function 
}); 

keyRef.on('value', function(data){ 
//data.val() returns the data in object form 
}); 
keyRef.on('value', function(data){ 
// data.val().currentTailor to access currentTailor attribute 
}); 

你可以安慰他們每個人看到的是返回值。

+0

中找回tUsername和tPassword哦,它工作!我一直認爲,當你在根中有一個單一的值時,我不需要.val(),並且可以直接用它的值名稱來調用它。我錯了。謝謝。 – Kaddy03

相關問題