Невозможно записать данные в базу данных даже после успешной попытки - PullRequest
0 голосов
/ 11 октября 2018

Я пытался записать некоторые данные в базу данных для своего веба, но даже после отображения предупреждения об успешной публикации данных они не загружаются в базу данных.Он работал нормально, прежде чем я попытался добавить функциональность для загрузки изображений в хранилище Firebase.Код не работал нормально, поэтому я удалил его, но с тех пор я не могу записать данные в базу данных.Ниже приведен мой код, пожалуйста, посмотрите.

Код Javascript: -

const realFileBtn = document.getElementById("real-file");
const customBtn = document.getElementById("custom-button");
const customText = document.getElementById("custom-text");

customBtn.addEventListener("click", function () {
    realFileBtn.click();
});
realFileBtn.addEventListener("click", function()
{
    if (realFileBtn.value) {
        customText.innerHTML = realFileBtn.value;
    }else{
        customText.innerHTML = "No file chosen, yet.";
    }
});

$("#createBtn").click(
    function(){

        var databaseRef = firebase.database().ref('posts/');
        alert(databaseRef);

        var Title = $("#tit").val();
        var desc =  $("#dees").val();



        if (Title !="" && desc != "") {
            var uid =  firebase.database().ref().child('posts').push().key;
            alert(uid);
            var data = {
                Title: Title,
                desc: desc,
                push: uid

            };
            var updates = {};
            updates['/posts/' + uid] = data;
            alert(updates);
            firebase.database().ref().update(updates);

            alert("You blog posted successfully!");  

            window.location.reload(); 
        }else{
            alert("All fields are necessary!"); 
        }




    }
    );

Пожалуйста, посмотрите.

Отображается предупреждение для databaseRef, предупреждение для uidотображается сообщение об успешной публикации данных, но данные по-прежнему не сохраняются в базе данных реального времени firebase.

1 Ответ

0 голосов
/ 11 октября 2018

Проблема в том, что вы забыли добавить функцию обратного вызова при вызове update().Давайте внимательнее посмотрим на эти две строки кода:

firebase.database().ref().update(updates);
alert("You blog posted successfully!");

Легко подумать, что если вызов функции update() возвращает, это признак того, что обновление успешно завершено.Но это не так.Для того чтобы API-интерфейс Firebase Javascript мог взаимодействовать с базой данных Firebase, ему необходимо отправить HTTP-запрос, а в JavaScript это можно сделать только асинхронно.

В документации по Firebase API функция сигнатура для update() равна update(values, onComplete), которая затем переходит в состояние , возвращает firebase.Promise, содержащий void .

Это означает, что вызов update() возвращаетдо того, как обновление действительно произошло.Чтобы выполнить действие, когда обновление действительно происходит, вам нужно либо предоставить функцию обратного вызова для параметра onComplete, либо использовать Promise API, который является значением, возвращаемым update().

Пример использования Promise API

firebase.database().ref().update(updates).then(function() {
    alert("You blog posted successfully!");
}, function(error) {
    alert("Oops, something went wrong!" + error);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...