Firebase Firestore Порядок по времени

Я пытаюсь реализовать синхронизацию базы данных 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(''))
}

person RebelCoder    schedule 23.07.2019    source источник


Ответы (1)


Итак, после мозгового штурма я получил сухое решение своей проблемы: - Я использовал функцию с функцией сортировки массива: Блок кода: -

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'))))

дайте мне знать правильное исправление, если вы придете, до тех пор я буду использовать это. Спасибо.

person RebelCoder    schedule 23.07.2019