来自我的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方法成功,因为它存储了登录用户的相应密钥:
但是当我尝试使用警报来检索它时,它表示未完成!我不明白,因为我假设我正在从数据库的根引用中调用,这是我的最低价。
我尝试为keyRef创建一个单独的.on()函数,但它仍然是相同的结果。
keyRef.on('value', function(data){
alert(data.currentTailor);
});
我是否以错误的方式调用了数据?
答案 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
});
您可以控制它们中的每一个以查看返回值。