Firebase Web - .remove() 似乎不起作用



我正在编写一个访问Firebase实时数据库的Web应用程序。我刚刚开始在应用程序中删除记录时遇到间歇性问题。我连续有两行应该删除两条不同的记录。问题的第一个迹象是,我将发送要删除两条记录的命令,只有第一条记录会删除。

我在故障排除中尝试了几件事。我尝试将 .remove() 替换为 .set(null),如 https://firebase.google.com/docs/database/web/read-and-write#delete_data 中所述。我还添加了 .then() 和 .catch() 命令,如 https://firebase.google.com/docs/reference/js/firebase.database.Reference#remove 所述。更改命令的顺序最终使两个 .remove() 命令暂时工作。片刻之后,经过进一步测试,我发现 .remove() 命令都不起作用。

我怀疑这个问题可能与今天发布的新版本有关,如 https://firebase.google.com/support/release-notes/js?authuser=0 所述。一旦我看到有更新,我就更新了 html 文档中的导入行,这没有任何明显的区别。

这是我的应用程序中的一个代码片段,应该在其中进行删除。请注意,等效代码在 12 小时前工作,所以我认为引用不是问题所在。另请注意,Firebase 不会提供任何错误,即使失败的 .remove() 或 .set(null) 应该在 .catch() 调用中捕获。

$("#edit-event-delete-btn").click(function(){
bootbox.confirm({
message: "Are you sure you want to delete this event?",
callback: function (result) {
if (result) {
var eventRef = firebase.database().ref("events/" + editEventEventSelectInputJQ.val());
var userEventRef = firebase.database().ref("users/" + firebase.auth().currentUser.uid + "/events/" + editEventEventSelectInputJQ.val())
eventRef.set(null)
.then(function() {
console.log("Remove succeeded.")
})
.catch(function(error) {
console.log("Remove failed: " + error.message)
});
userEventRef.set(null)
.then(function() {
console.log("Remove succeeded.")
})
.catch(function(error) {
console.log("Remove failed: " + error.message)
});
}
}
})
});

我只是在这里问,因为谷歌建议在问他们之前先问这里。

我将不胜感激任何有用的意见。

**更新**

以下是我的 Firebase 数据库规则:

{
"rules": {
".read": "true",
".write": "auth != null"
}
}

这是我数据库的屏幕截图

我会检查两件事;

  1. 您的 Firebase 规则是什么样的,您是否有权删除该对象?我假设是的,因为火基不会返回任何错误。
  2. 检查您尝试删除的路径,您确定它是正确的吗?尝试运行以下代码,路径是否正确?

    $("#edit-event-delete-btn").click(function(){
    bootbox.confirm({
    message: "Are you sure you want to delete this event?",
    callback: function (result) {
    if (result) {
    var eventPath = "events/" + editEventEventSelectInputJQ.val();
    var eventRef = firebase.database().ref(eventPath);
    var userEventPath = "users/" + firebase.auth().currentUser.uid + "/events/" + editEventEventSelectInputJQ.val();
    var userEventRef = firebase.database().ref(userEventPath)
    eventRef.set(null)
    .then(function() {
    console.log("Remove succeeded.", eventPath)
    })
    .catch(function(error) {
    console.log("Remove failed: " + error.message, eventPath)
    });
    userEventRef.set(null)
    .then(function() {
    console.log("Remove succeeded.", userEventPath)
    })
    .catch(function(error) {
    console.log("Remove failed: " + error.message, userEventPath)
    });
    }
    }
    })
    });
    
Try this way ..
But I have to ask , what is the value come from this "editEventEventSelectInputJQ.val()", is it object Id or Value object?
$("#edit-event-delete-btn").click(function(){
bootbox.confirm({
message: "Are you sure you want to delete this event?",
callback: function (result) {
if (result) {
var object={}
object["events/" + editEventEventSelectInputJQ.val()]=null;
firebase.database().ref().update(object).then(function(success){
console.log("success")
}).catch((error)=>{
console.error("Error: " + error.code);
});

}
}
})
});

相关内容

  • 没有找到相关文章

最新更新