Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
移除Firebase中的对象?(JavaScript)_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

移除Firebase中的对象?(JavaScript)

移除Firebase中的对象?(JavaScript),javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我正在尝试循环通过我的应用程序中的一个对象,并在数据库中已有30条消息后删除旧消息。以下是我目前的代码: var ref1 = firebase.database().ref("chatRooms/" + rm + "/messages"); var query = ref1.orderByChild("time"); query.once("value").then(function(l) { l.forEach(function(d) { ref1.once("valu

我正在尝试循环通过我的应用程序中的一个对象,并在数据库中已有30条消息后删除旧消息。以下是我目前的代码:

var ref1 = firebase.database().ref("chatRooms/" + rm + "/messages");
var query = ref1.orderByChild("time");

query.once("value").then(function(l) {
    l.forEach(function(d) {
      ref1.once("value").then(function(snapshot1) {
      var ast = snapshot1.numChildren(); // Getting the number of children
      console.log(ast);
      if (ast > 29) {
        d.remove();

      }
    });
  });
});
唯一的问题是,我收到的每个错误如下:

SCRIPT438:对象不支持属性或方法“remove”


如果有人知道如何解决这个问题,或者知道其他解决方案,我将不胜感激

您的
d
是一个
DataSnapshot
,它表示某个特定时间给定位置的值。它不能直接删除

但您可以查找该值的来源位置,并在那里调用
remove()

d.ref.remove();
完整工作(和简化)代码段:


实时代码示例:

感谢您的回复。现在我收到这个错误:SCRIPT5002:预期函数?我还在控制台中收到来自Firebase的警告:Firebase警告:用户回调引发异常。TypeError:应为函数。能否设置一个JSFIDLE/jsbin来重现该问题?这将更容易向您展示如何以这种方式修复代码。非常感谢!我现在唯一的问题是它删除了29条最近的消息。有没有办法把孩子们按相反的顺序排列,这样就不会发生这种情况??非常感谢您的帮助!:)如果您在firebase查询中搜索有关颠倒顺序的问题,您会发现该主题已经讨论了很多。
function deleteMessages(maxCount) {
  root.once("value").then(function(snapshot) {
    var count = 0;
    snapshot.forEach(function(child) {
      count++;
      if (count > maxCount) {
        console.log('Removing child '+child.key);
        child.ref.remove();
      }
    });
    console.log(count, snapshot.numChildren());
  });

}

deleteMessages(29);