即使尝试成功,也无法在Firebase上写入数据

时间:2018-10-11 05:16:21

标签: javascript firebase firebase-realtime-database

我试图在数据库中为我的网站写一些数据,但是即使在显示成功发布数据的警报之后,该数据也没有上载到Firebase。在尝试添加将图像上传到Firebase存储的功能之前,它运行良好。该代码无法正常工作,因此我将其删除,但是自那以后,我无法将数据写入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 :(得分:0)

问题是您在调用update()时忘记添加回调函数。让我们仔细看看这两行代码:

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

很容易想到,如果update()函数调用返回,则表明更新成功完成。但是事实并非如此。为了使Firebase Javascript API与Firebase数据库进行通信,它需要提交HTTP请求,并且必须使用JavaScript才能异步完成。

在Firebase API documentation中,update()的函数 signature update(values, onComplete),然后继续进入状态返回firebase。包含void的承诺

这意味着对update()的调用在更新实际发生之前返回。要在实际发生更新时采取措施,您需要为onComplete参数提供回调函数,或者使用update()返回的值Promise API。

使用Promise API的示例

firebase.database().ref().update(updates).then(function() {
    alert("You blog posted successfully!");
}, function(error) {
    alert("Oops, something went wrong!" + error);
});