2017-08-08 32 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

相关问题