Firebase:orderByKey是否返回有序快照

时间:2018-09-25 20:47:01

标签: javascript firebase firebase-realtime-database

这听起来像是一个愚蠢的问题,但是文档说:

  

orderByKey

     

orderByKey()返回firebase.database.Query

     

生成按键排序的新查询对象。

查询对象按键排序,这意味着我可以做到:

ref.orderByKey().limitToLast(1)

获得最后的顺序。

但如果我这样做:

ref.limitToLast(1).on('child_added', function(s)
{
    ref.orderByKey().limitToLast(2).once('value').then(function(snapshot)
    {
        var val = snapshot[Object.keys(snapshot)[0]];
    });
});

val总是倒数第二吗?文档没有具体说明快照是有序的。我应该自己继续对它进行排序以确保吗?

有没有更好的方法来获得倒数第二个,或者如果每次添加一个孩子时只有一个倒数呢?基本上,我要先添加一个。

谢谢!

1 个答案:

答案 0 :(得分:1)

您有以下查询:

ref.orderByKey().limitToLast(2)

此查询按键对子节点进行排序,然后返回最后两项。

要按顺序访问结果,请使用Snapshot.forEach()

ref.orderByKey().limitToLast(2).once('value').then(function(snapshot)
{
  snapshot.forEach(function(child) {
    console.log(child.val());
  });
});

第一次执行循环将为您提供倒数第二个项目,因此,如果您想捕获它:

ref.orderByKey().limitToLast(2).once('value').then(function(snapshot)
{
  var isFirst = true;
  snapshot.forEach(function(child) {
    if (isFirst) {
      console.log(child.val());
      isFirst = false;
    }
  });
});