我试图在数据库中为我的网站写一些数据,但是即使在显示成功发布数据的警报之后,该数据也没有上载到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实时数据库中。
答案 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。>
firebase.database().ref().update(updates).then(function() {
alert("You blog posted successfully!");
}, function(error) {
alert("Oops, something went wrong!" + error);
});