代码之家  ›  专栏  ›  技术社区  ›  Saccarab

firebase在一条路径上监听最近的10个项目,在添加新子项时不会丢失第10个项目

  •  2
  • Saccarab  · 技术社区  · 8 年前

    我想监听特定路径上的第一个节点数。

    ref.orderByKey().limitToLast(10).on('value')
    ...
    

    这是我最初使用的,但是在本例中,当一个新的子节点被添加到路径中时,监听器现在将包含最新的子节点。这将导致第11个节点不再被更新。

    我提出的解决方案是在侦听器设置之前获取第一个节点的id。因此,我可以听最初的10个帖子,包括新来的人与另一个孩子添加的听众。

    ref.orderByKey().endAt(threshold).limitToLast(10)
    

    但是,这种方法要求我分离当前侦听器,并在每次我打算访问比初始计数更多的节点时设置一个新的侦听器。(只需要一个基本的拉就可以加载更多的功能)

    oldref.off()
    ref.orderByKey().endAt(threshold).limitToLast(20)
    

    这种方法有效,但我觉得它会使代码过于复杂,所以我想知道是否有人有更好的方法。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Dmytro Rostopira    8 年前

    解决方法很简单:使用 "child_added" 而不是 "value"

    var items = [];
    ref.orderByKey().limitToLast(10).on("child_added", (snap) => {
        items.push(snap);
    });
    
    // To load more do this
    ref.orderByKey().limitToLast(20).endAt(items[0].key).once("value")
    

    这样你就可以一个接一个地得到最后10个项目,然后每个新项目