此代码有效:
firebase.database().ref($scope.language).orderByChild('word').equalTo($scope.word).once('value')
.then(function(snapshot) {
console.log(snapshot.val());
})
记录对象及其密钥。
此代码不起作用:
firebase.database().ref($scope.language).orderByChild('word').equalTo($scope.word).remove()
.then(function(snapshot) {
console.log("Removed!");
})
错误消息是:
TypeError: firebase.database(...).ref(...).orderByChild(...).equalTo(...).remove is not a function
documentation使remove()
看起来很简单。我错过了什么?
答案 0 :(得分:3)
只有在知道JSON树中的特定位置后才能加载数据。要确定该位置,您需要执行查询并循环匹配结果:
firebase.database().ref($scope.language).orderByChild('word').equalTo($scope.word).once("value").then(function(snapshot) {
snapshot.forEach(function(child) {
child.ref.remove();
console.log("Removed!");
})
});
如果您只想在删除所有内容后进行记录,则可以使用Promise.all()
:
firebase.database().ref($scope.language).orderByChild('word').equalTo($scope.word).once("value").then(function(snapshot) {
var promises = [];
snapshot.forEach(function(child) {
promises.push(child.ref.remove());
})
Promise.all(promises).then(function() {
console.log("All removed!");
})
});
答案 1 :(得分:0)
这是Frank的第一个带有另一个闭包的代码块。如果没有关闭,记录将从数据库中删除,但随后会出现错误消息:
Uncaught (in promise) TypeError: snapshot.forEach(...).then is not a function
添加闭包修复了错误消息。
firebase.database().ref($scope.language).orderByChild('word').equalTo($scope.word).once("value").then(function(snapshot) {
snapshot.forEach(function(child) {
child.ref.remove();
}); // a closure is needed here
}).then(function() {
console.log("Removed!");
});