从我在本网站的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