Данные не загружаются в базу данных firebase.google.com

Я пытаюсь сохранить и загрузить имя пользователя моих игроков в базу данных firebase, но по какой-то причине это не работает. Имя пользователя имеет значение null, когда я использую предупреждения для его отладки. Я инициализирую firebase в теге в моем html-файле. Вот мой код для сохранения и загрузки имени пользователя. Сохранение работает, но не загружается:

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;
    });
}

person PlanetVaster    schedule 24.05.2016    source источник
comment
Добавьте обработчики ошибок в свои слушатели и посмотрите, что они выводят?   -  person Kato    schedule 25.05.2016
comment
@kato Я сделал, внутри метода он работает, но возвращает ноль   -  person PlanetVaster    schedule 25.05.2016
comment
в методе Once или методе set нет обработчиков ошибок.   -  person Kato    schedule 25.05.2016


Ответы (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();
    });
}
person PlanetVaster    schedule 26.05.2016