Firebase数据返回UNDEFINED值,即使它具有内容

时间:2017-08-08 06:36:27

标签: javascript firebase firebase-realtime-database

来自我的recent question在这个网站中(在我使用“Promise”技术之前),我想出了将变量存储在firebase数据库中而不是将其作为javascript的全局变量我可以在任何函数中使用它(即使在异步函数中)。所以我制作了这段代码:

function logIn(){
	var loggedUname = $("#loginUname").val();
	var loggedPword = $("#loginPword").val();
	
	var tailorRef = firebase.database().ref('tailors');
	var keyRef = firebase.database().ref();
	
	tailorRef.on('value', function(data){
		data.forEach(function(childData){
			if ( (loggedUname == childData.val().tUsername) && (loggedPword == childData.val().tPassword) ){
				currentKey = childData.key;
			}
		});
		keyRef.update({currentTailor: currentKey});
		alert("key = " + keyRef.currentTailor);
	});
	
}

.update方法成功,因为它存储了登录用户的相应密钥:

the updated database

但是当我尝试使用警报来检索它时,它表示未完成!我不明白,因为我假设我正在从数据库的根引用中调用,这是我的最低价。

我尝试为keyRef创建一个单独的.on()函数,但它仍然是相同的结果。

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

我是否以错误的方式调用了数据?

1 个答案:

答案 0 :(得分:0)

正确的方法是:

keyRef.on('value', function(data){
 //  alert(data.val().currentTailor); see the difference 
     console.log('currentTailor ==>', data.val().currentTailor);
});
建议不要在javascript中使用

alert(),因为它冻结了您的网页。改为使用控制台。通过这种方式,您可以在浏览器控制台中查看日志(在chrome中按 Ctrl + Shift + J

  

Firebase的 on()方法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
 });

您可以控制它们中的每一个以查看返回值。