我使用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解释的那样简单。
答案 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");
}
});