如何删除/删除Firebase上的节点

时间:2014-10-23 21:23:08

标签: javascript web firebase

我使用Firebase作为网络应用。它是用普通的Javascript编写的,不使用外部库。

我可以"推"并使用' .on(" child_added")'来检索数据,但是' .remove()'不按照它应该的方式工作。根据API,

  

" Firebase.remove() -   删除此Firebase位置的数据。子位置的任何数据也将被删除。   删除的效果将立即显示。"

但是,删除不会立即发生;只有当整个脚本完成运行时。我需要删除然后立即使用清除的树。

示例代码:

ref = new Firebase("myfirebase.com") //works
ref.push({key:val}) //works

ref.on('child_added', function(snapshot){
//do stuff
}); //works

ref.remove()
//does not remove until the entire script/page is done

有一个类似的帖子here,但我没有使用Ember库,即便如此,它似乎也应该像API解释的那样简单。

7 个答案:

答案 0 :(得分:84)

问题是您在Firebase的根目录上调用remove

ref = new Firebase("myfirebase.com")
ref.remove();

这将通过API删除整个Firebase。

您通常希望删除其下的特定子节点,您可以使用以下方法:

ref.child(key).remove();

答案 1 :(得分:11)

我希望这段代码对某人有帮助-来自 official Google Firebase documentation

var adaRef = firebase.database().ref('users/ada');
adaRef.remove()
  .then(function() {
    console.log("Remove succeeded.")
  })
  .catch(function(error) {
    console.log("Remove failed: " + error.message)
  });

答案 2 :(得分:7)

正如其他人所说,对.remove()的调用是异步的。我们都应该意识到' ' ,即使它是在光速下也不会发生。

' ' 的意思是下一行代码应该能够在调用.remove()后执行。对于异步操作,下一行可能是数据被删除后,它可能 - 它完全是偶然性和已经过去的时间量。

.remove()在我们知道操作已完成(有或没有错误)之后,将一个参数作为回调函数来帮助处理这种情况以执行操作。 .push()需要两个参数,一个值和一个回调,就像.remove()一样。

以下是修改后的示例代码:

ref = new Firebase("myfirebase.com")

ref.push({key:val}, function(error){
  //do stuff after push completed
});

// deletes all data pushed so far
ref.remove(function(error){
  //do stuff after removal
});

答案 3 :(得分:7)

删除记录。

 var db = firebase.database();                   
 var ref = db.ref(); 
 var survey=db.ref(path+'/'+path);    //Eg path is company/employee                
 survey.child(key).remove();          //Eg key is employee id

答案 4 :(得分:5)

Firebase.remove()可能大多数Firebase方法都是异步的,因此您必须先收听事件以了解发生的事情:

parent = ref.parent()
parent.on('child_removed', function (snapshot) {
    // removed!
})
ref.remove()

根据Firebase文档,即使您丢失网络连接也应该可以正常工作。如果您想知道更改何时与Firebase服务器实际同步,您可以将回调函数传递给Firebase.remove方法:

ref.remove(function (error) {
    if (!error) {
        // removed!
    }
}

答案 5 :(得分:0)

如果您使用axios并通过服务呼叫进行尝试。

URL: https://react-16-demo.firebaseio.com/
Schema Name: todos
Key: -Lhu8a0uoSRixdmECYPE

axios.delete(`https://react-16-demo.firebaseio.com/todos/-Lhu8a0uoSRixdmECYPE.json`). then();

可以提供帮助。

答案 6 :(得分:-1)

这有点棘手,但是您可以通过将特定节点的数据设置为空来删除特定节点, 例如:

your_db_node_ref.set({},
    (error) => {
        if (error) {
            res.send("error");
            console.log(error);
        } else {
            res.send("ok");
        }
    });