Firebase数据库remove()“不是函数”

时间:2018-02-20 21:59:37

标签: firebase-realtime-database

此代码有效:

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()看起来很简单。我错过了什么?

2 个答案:

答案 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!");
    });