1

Ich versuche, den Benutzernamen meiner Spieler in einer Firebase-Datenbank zu speichern und zu laden, aber aus irgendeinem Grund funktioniert es nicht. Der Benutzername ist null, wenn ich Warnungen zum Debuggen verwende. Ich initialisiere Firebase in einem Tag in meiner HTML-Datei. Hier ist mein Code zum Speichern und Laden von Nutzernamen. Speichern funktioniert, aber nicht laden:Die Daten werden nicht geladen firebase.google.com-Datenbank

var signedIn = false; 
var player; 
var isAnonymous; 
var userID; 

var username = null; 

window.onload = function() { 
    auth.onAuthStateChanged(function(user) { 
     //var user = firebase.auth().currentUser; 
     if (user) { 
      // User is signed in. 
      player = firebase.auth().currentUser; 
      signedIn = true; 
      isAnonymous = user.isAnonymous; 
      userID = user.uid; 
      refreshUsername(); 
     } else { 
      // No user is signed in. 
      signedIn = false; 
      window.location.href = "index.html"; 
     } 
    }); 
} 

function refreshUsername() { 
    if (username != null && username != "") { 
     updateUsername(); 
     document.getElementById("username-text").innerHTML += username; 
    } else { 
     updateUsername(); 
     alert("old Not working: " + username); 
     var newName = getRandomName(); 
     document.getElementById("username-text").innerHTML += newName; 
     saveUsername(newName); 
     username = newName; 
     alert("Not working: " + username); 
    } 
} 

function saveUsername(name) { 
    firebase.database().ref('users/' + userID).set({ 
     username: name 
    }); 
} 

function updateUsername() { 
    /*firebase.database().ref('/users/' + userID).once('value').then(function(snapshot) { 
     username = snapshot.val().username; 
    });*/ 
    firebase.database().ref('users/' + userID).once('value').then(function(snapshot) { 
     username = snapshot.val().username; 
    }); 
} 
+0

Hinzufügen von Fehlerhandlern zu Ihren Listenern und sehen, was sie ausgeben? – Kato

+1

@kato Ich habe, innerhalb der Methode funktioniert es, aber es gibt Null – PlanetVaster

+0

gibt es keine Fehlerhandler auf die einmal-Methode oder set-Methode. – Kato

Antwort

1

Ich schaffte es zu arbeiten. Der Firebase-Kram dauerte so lange, dass der Rest des Codes fertig war, bevor der Benutzername aktualisiert wurde. Ich repariere es mithilfe von Rückrufen. Hier ist mein Arbeitscode:

var signedIn = false; 
var player; 
var isAnonymous; 
var userID; 

var username = null; 

window.onload = function() { 
    auth.onAuthStateChanged(function(user) { 
     //var user = firebase.auth().currentUser; 
     if (user) { 
      // User is signed in. 
      player = firebase.auth().currentUser; 
      signedIn = true; 
      isAnonymous = user.isAnonymous; 
      userID = user.uid; 
      refreshUsername(); 
     } else { 
      // No user is signed in. 
      signedIn = false; 
      window.location.href = "index.html"; 
     } 
    }); 
} 

function refreshUsername() { 
    document.getElementById("username-text").innerHTML = "Username: " + "Loading..."; 
    updateUsername(function() { 
     if (username != null) { 
      document.getElementById("username-text").innerHTML = "Username: " + username; 
     } else { 
      randomUsername(); 
     } 
    }); 
} 

function saveUsername(name) { 
    firebase.database().ref('users/' + userID).set({ 
     username: name 
    });       
} 

function updateUsername(_callback) { 
    firebase.database().ref('users/' + userID).once('value').then(function(snapshot) { 
     username = snapshot.val().username; 
     _callback(); 
    }); 
} 
Verwandte Themen