Firebase упорядочить по дате Desc используя Ionic Infinite scroll - PullRequest
0 голосов
/ 02 мая 2018

Я хотел бы заказать список комментариев по дате desc (используя ионную бесконечную прокрутку), но это не работает, сортировка не в порядке:

Что я пробовал:

  // How I push a new comment
  const ref=firebase.database().ref('/comment/'+imageId+'/').push();
  ref.set({
    created_at: firebase.database.ServerValue.TIMESTAMP
    ...
  })

enter image description here

Для извлечения и сортировки по дате Desc:

ngOnInit ():

  limit: number = 10;
  var items = [];
  this.listComments = db.ref('comment/'+this.imageId).orderByChild("created_at");

  this.listComments.limitToLast(this.limit).on('value', itemList => {
     itemList.forEach(function(data) {
        const user_id=data.val().user_id;
        db.ref('users/' + user_id).on('value',function(snap) {
             items.push({'displayName':snap.val().displayName,'created_at':data.val().created_at});
             return false;
         });
     });
  })
  this.commentArray=items;
 }

onInfiniteScroll (событие):

let items = [];

this.limit += 2;
//same as before
this.listComments.limitToLast(this.limit).on('value', itemList => {
     itemList.forEach(function(data) {
        const user_id=data.val().user_id;
        db.ref('users/' + user_id).on('value',function(snap) {
             items.push({'displayName':snap.val().displayName,'created_at':data.val().created_at});
             return false;
         });
     });
  })

  setTimeout(() => {
     this.commentArray=items;
     event.complete();
   }, 500);

Результат:

enter image description here

Есть идеи?

1 Ответ

0 голосов
/ 02 мая 2018

orderByChild сортировка по возрастанию ( документы ). Вы можете создать отдельный ключ для нисходящего порядка created_at * -1. Это означало бы, что старые метки времени больше новых. Так что может быть что-то вроде:

const ref = firebase.database().ref('comment').child(imageId).push();
ref.set({
  created_at: firebase.database.ServerValue.TIMESTAMP
})
.then(() => {
  return ref.child('created_at').once('value')
  .then((ss) => {
    return ref.child('created_at_desc').set(ss.val() * -1)
  })
})
...