Javascript Firebase:orderByKey是否返回有序快照

Javascript Firebase:orderByKey是否返回有序快照,javascript,firebase,firebase-realtime-database,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('va

这听起来像个愚蠢的问题,但医生说:

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
是否总是倒数第二?文档没有明确说明快照已订购。我是否应该继续自己排序以确定

是否有更好的方法来获得第二个倒数第二个,或者如果每次添加一个孩子时只有一个倒数第二个?基本上,我想要的是刚才添加的那个之前的那个

谢谢

您有以下查询:

ref.orderByKey().limitToLast(2)
此查询按键对子节点排序,然后返回最后两项

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

循环的第一次将为您提供倒数第二个项目,因此,如果您希望捕获该项目:

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