1

私はプレイヤーのユーザー名をfirebaseデータベースに保存しようとしていますが、何らかの理由でそれが機能していません。デバッグにアラートを使用すると、ユーザー名はnullになります。私はhtmlファイル内のタグのfirebaseを初期化します。ここで私のコードは、ユーザー名の保存と読み込みです。保存中ですが、読み込み中ではありません:データはfirebase.google.comデータベースをロードしません

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

リスナーにエラーハンドラを追加し、出力内容を確認してください。 – Kato

+1

@katoメソッド内で動作しましたが、nullを返します – PlanetVaster

+0

onceメソッドまたはsetメソッドにエラーハンドラがありません。 – Kato

答えて

1

私はそれを有効にすることができました。 firebaseのものは、ユーザー名が更新されるまでにコードの残りの部分が完了するまでに長時間を要していました。コールバックを使って修正します。ここに私の作業コードがあります:

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(); 
    }); 
} 
関連する問題