Как быть уверенным, что приложение реагирует на последний запрос? - PullRequest
0 голосов
/ 30 марта 2019

У меня есть приложение «Реакция-Избыток», которое:

  1. Загружает N записей из базы данных в зависимости от параметра запроса «limit» (по умолчанию 20 записей) при первой загрузке приложения (инициализация)
  2. Каждые 10 секунд приложение запрашивает те же (или более новые) записи из базы данных для обновления данных в режиме реального времени
  3. Если пользователь меняет фильтры - приложение запрашивает новые записи из базы данных в соответствии с фильтром и повторно отображает приложение (+ изменяет интервал для загрузки данных в соответствии с фильтрами)
  4. Если пользователи прокручивают страницу вниз, приложение автоматически загружает больше записей.

Проблема в том, что если пользователь и экземпляр пытаются что-то отфильтровать и одновременно загружать больше данных, 2 запроса могут конфликтовать и перезаписывать друг друга. Как в приложении реагировать на избыточность я могу быть уверен в последовательности запросов. Может быть, есть общий подход к тому, как правильно ставить запросы в очередь?

Заранее спасибо!

1 Ответ

0 голосов
/ 30 марта 2019

Я не уверен, что вы подразумеваете под "столкновением".Насколько я понимаю, произойдет следующее:

  • Если предположить, что оба запроса выполнены успешно, то для каждого из них будут получены данные, состояние избыточности будет обновлено дважды, и компонент, который отображает обновленное состояниебудет отображаться дважды (и время, прошедшее между двумя визуализациями, может быть очень коротким, что может быть не очень приятным для пользователя)

Если вы хотите, чтобы только один из этих двух запросов обновил компонент,тогда возможное решение может быть следующим:

  • Каждый запрос начинается перед извлечением данных из базы данных путем создания действия RETRIEVAL_START.'RETRIEVAL_START' устанавливает переменную состояния редукции 'retrievalInProgress'

  • Если вы хотите, чтобы в таком случае получать результаты только по 1-му из двух запросов, вы можете проверить, прежде чемвызов создателя действия из компонента, если включена функция retrievalInProgress.Если это так, не вызывайте создателя действия (другими словами, не запрашивайте данные во время выполнения запроса).'retrievalInProgress' будет очищен при успешном или неудачном извлечении данных.

  • Если вы хотите получить результаты только из 2-го из двух запросов, вместо этого сделайте «retrievalInProgress» счетчиком, вместо этогологическогоВ действии «retrievalSuccess» редуктора, если этот счетчик больше 1, это означает, что новый запрос уже запущен.В этом случае не обновляйте состояние, а уменьшайте счетчик.

Я надеюсь, что это имеет смысл.Я не могу быть уверен на 100%, что это работает до того, как я его протестирую, чего я не собираюсь делать :), но я бы выбрал такой подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...