Firebase Web - .remove()似乎无法正常工作

时间:2018-03-21 04:03:48

标签: javascript jquery firebase firebase-realtime-database firebaseui

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

我在故障排除中尝试了几件事。我试图用https://firebase.google.com/docs/database/web/read-and-write#delete_data中描述的.set(null)替换.remove()。我还添加了.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小时前工作,所以我不认为引用是问题所在。另请注意,即使在.catch()调用中捕获失败的.remove()或.set(null),Firebase也不会提供任何错误。

$("#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"
  }
}

here是我数据库的屏幕截图

2 个答案:

答案 0 :(得分:0)

我要检查两件事;

  1. 您的firebase规则是什么样的,您是否有权删除该对象?我认为是的,因为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)
                        });
                }
            }
        })
    });
    

答案 1 :(得分:0)

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



            }
        }
    })
});