Javascript Firebase Firestore“;“按时间排序”;

Javascript Firebase Firestore“;“按时间排序”;,javascript,firebase,web,google-cloud-firestore,saga,Javascript,Firebase,Web,Google Cloud Firestore,Saga,我正在尝试实现firebase数据库“按时间戳排序”同步,但无法实现 对我来说,它不是按“任何顺序”保存消息 以下是我的同步代码块: let time = {time: moment().format('MM Do YY, h:mm: a')} const createMessage = (uid, text, displayName) => ({ uid, text, displayName, time }) function * syncMessagesSaga (

我正在尝试实现firebase数据库“按时间戳排序”同步,但无法实现

对我来说,它不是按“任何顺序”保存消息

以下是我的同步代码块:

let time =  {time: moment().format('MM Do YY, h:mm: a')}
const createMessage = (uid, text, displayName) => ({
  uid,
  text,
  displayName,
  time
})

function * syncMessagesSaga () {
    //ordering by uid does not make sense to me
    const channel = yield call(()=>prsf(({rsf})=>
     rsf.firestore.channel('messages')));
    while(true) {
        const snapshot = yield take(channel);
        let messages = [];
        snapshot.forEach(message => {
            messages.push({id: message.id, ...message.data()})  
        });
        yield put(syncMessages(messages))

      }
}
问题是我必须把下面的代码块

.orderBy("time", "asc")
但我不知道该在哪里添加

我想可能是因为我的发送代码功能没有按顺序保存 “我的发送和保存”的代码块:

function * sendMessageSaga (action) {
  const rsf= yield call(getRsf);
  const uid = yield select(state => state.login.user.uid)
  const displayName = yield select(state => state.login.user.displayName)

  yield call(rsf.firestore.addDocument, 'messages', createMessage(uid, action.message, displayName))
  yield put(reset('DCTForm'))
  yield put(reset('MessageForm'))
  yield put(changeNewMessage(''))
}

所以在做了一些头脑风暴后,我得到了一个解决问题的干法方案:- 我使用了一个具有数组排序功能的函数: 代码块:-

function compareValues(key, order = 'asc') {
      return function (a, b) {
        if (!a.hasOwnProperty(key) ||
          !b.hasOwnProperty(key)) {
          return 0;
        }
        const varA = (typeof a[key] === 'string') ?
          a[key].toUpperCase() : a[key];
        const varB = (typeof b[key] === 'string') ?
          b[key].toUpperCase() : b[key];

        let comparison = 0;
        if (varA > varB) {
          comparison = 1;
        } else if (varA < varB) {
          comparison = -1;
        }
        return (
          (order == 'desc') ?
            (comparison * -1) : comparison
        );
      };
    }
    yield put(syncMessages(messages.sort(compareValues('time'))))
函数比较值(键,顺序='asc'){
返回函数(a,b){
如果(!a.hasOwnProperty(键)||
!b.hasOwnProperty(键)){
返回0;
}
const varA=(一个[key]=“string”的类型)?
a[key].toUpperCase():a[key];
const varB=(b的类型[键]='string')?
b[key].toUpperCase():b[key];
让比较=0;
if(varA>varB){
比较=1;
}else if(varA
如果你来找我,请告诉我正确的解决方法,到时候我会用这个
谢谢

所以在做了一些头脑风暴之后,我得到了一个解决问题的简单方法:- 我使用了一个具有数组排序功能的函数: 代码块:-

function compareValues(key, order = 'asc') {
      return function (a, b) {
        if (!a.hasOwnProperty(key) ||
          !b.hasOwnProperty(key)) {
          return 0;
        }
        const varA = (typeof a[key] === 'string') ?
          a[key].toUpperCase() : a[key];
        const varB = (typeof b[key] === 'string') ?
          b[key].toUpperCase() : b[key];

        let comparison = 0;
        if (varA > varB) {
          comparison = 1;
        } else if (varA < varB) {
          comparison = -1;
        }
        return (
          (order == 'desc') ?
            (comparison * -1) : comparison
        );
      };
    }
    yield put(syncMessages(messages.sort(compareValues('time'))))
函数比较值(键,顺序='asc'){
返回函数(a,b){
如果(!a.hasOwnProperty(键)||
!b.hasOwnProperty(键)){
返回0;
}
const varA=(一个[key]=“string”的类型)?
a[key].toUpperCase():a[key];
const varB=(b的类型[键]='string')?
b[key].toUpperCase():b[key];
让比较=0;
if(varA>varB){
比较=1;
}else if(varA
如果你来找我,请告诉我正确的解决方法,到时候我会用这个
谢谢

Firestore文档中对订购进行了详细介绍。这里的示例几乎完全符合您的需要。是的,在Firestore中对排序有很好的定义,但我使用的是redux firenase saga。。但无论如何,我找到了解决办法。Firestore文档中对订购有很好的介绍。这里的示例几乎完全符合您的需要。是的,在Firestore中对排序有很好的定义,但我使用的是redux firenase saga。。但无论如何我找到了解决办法。