Javascript Firebase With Web:在引用中使用用户Id导致错误:未捕获类型错误:无法读取属性';在';未定义的

Javascript Firebase With Web:在引用中使用用户Id导致错误:未捕获类型错误:无法读取属性';在';未定义的,javascript,html,firebase,firebase-realtime-database,firebase-authentication,Javascript,Html,Firebase,Firebase Realtime Database,Firebase Authentication,我在fire base reference中有一个错误,出于某种原因,它说引用未定义,我无法找出原因,如果您能以任何方式提供帮助,那就太好了 var eventtable = document.getElementById("eventtable"); var dateofevent = document.getElementById("dateofevent"); var datetext = dateofevent.textContent; var user = firebase.auth(

我在fire base reference中有一个错误,出于某种原因,它说引用未定义,我无法找出原因,如果您能以任何方式提供帮助,那就太好了

var eventtable = document.getElementById("eventtable");
var dateofevent = document.getElementById("dateofevent");
var datetext = dateofevent.textContent;
var user = firebase.auth().currentUser;
var firebaseRef;

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    var email = user.email;
    userId = user.uid;
    document.getElementById("welcomeuser").innerHTML = "Welcome " + email;
firebaseRef = firebase.database().ref().child("Events").child(userId).child(datetext);

} else {
     window.location.href="login.html";
}
});

firebaseRef.on("value", function(snapshot) {

var content = '';

snapshot.forEach(function(childSnapshot) {
    var key = childSnapshot.key;
    var val = childSnapshot.val();

    content +='<tr>';
    content += '<td>' + val.Name + '</td>';
    content += '<td>' + val.Description + '</td>';
    content += '</tr>';
});
    eventtable.append(content);
}, function(error) {
    console.error(error);
});
var eventtable=document.getElementById(“eventtable”);
var dateofevent=document.getElementById(“dateofevent”);
var datetext=dateofevent.textContent;
var user=firebase.auth().currentUser;
var firebaseRef;
firebase.auth().onAuthStateChanged(函数(用户){
如果(用户){
var email=user.email;
userId=user.uid;
document.getElementById(“welcomeuser”).innerHTML=“欢迎”+电子邮件;
firebaseRef=firebase.database().ref().child(“事件”).child(userId).child(datetext);
}否则{
window.location.href=“login.html”;
}
});
firebaseRef.on(“值”,函数(快照){
var内容=“”;
snapshot.forEach(函数(childSnapshot){
var key=childSnapshot.key;
var val=childSnapshot.val();
内容+='';
内容+=''+值名称+'';
内容+=''值描述+'';
内容+='';
});
eventtable.append(内容);
},函数(错误){
控制台错误(error);
});

您试图在firebaseRef有值之前使用它

onAuthStateChanged是异步的,这意味着它会立即返回,并且在获得身份验证信息之前不会执行您传递的回调。这意味着firebaseRef在被调用之前没有值。代码继续假设firebaseRef有一个值


如果要使用firebaseRef,只能在分配firebaseRef后使用。

您试图在firebaseRef有值之前使用它

onAuthStateChanged是异步的,这意味着它会立即返回,并且在获得身份验证信息之前不会执行您传递的回调。这意味着firebaseRef在被调用之前没有值。代码继续假设firebaseRef有一个值


如果你想使用firebaseRef,你只能在它被分配后使用它。

最好的方法是什么?把
firebaseRef.on(“value”,function(snapshot){}
块放在
If(user){}
one中。通过这种方式,您可以确定您拥有
firebaseRef
的值。执行此操作的最佳方法是什么?将
firebaseRef.on(“value”,function(snapshot){}
块置于
if(user){}
块中。通过这种方式,您可以确定您拥有
firebaseRef
的值。