Разрывные циклы в RxJava - PullRequest
0 голосов
/ 11 марта 2019

Пример приложения: у меня есть две независимые части:

  • Счетчик 1-10
  • Список, который отображает все слова, загруженные из файла с таким количеством букв

Теперь это будет работать так:

  • Счетчик будет Observable<Integer>, который испускает числа 1-10
  • Для отображения списка будет использоваться WordFileService.load(n) для асинхронной загрузки списка слов
  • После того, как список загружен, он должен уведомить счетчик для выдачи следующего номера

Другими словами, здесь есть цикл - исходный излучатель зависит от завершения целевого излучателя и наоборот.

Также рассмотрим более сложный случай, когда исходный излучатель зависит также от результата целевого излучателя. Например. скажем, что передатчик числа будет принимать количество испущенных слов и испускать следующее число с той же четностью (например, если следующее число, которое должно быть испущено, равно 5, а количество загруженных слов равно 36, оно пропустит 5 и испустит 6, с 6 mod 2 == 36 mod 2).

Может быть даже проще думать в терминах любых многопользовательских игр пошаговых игр. Например. рассмотрим шахматы. Один игрок начинает, другой отвечает в зависимости от его хода, затем первый игрок отвечает в ответ на ход второго игрока и так далее. Таким образом, у нас было бы 2 Observable<PlayerMove> или что-то в этом роде, которые имели бы круговые отношения.

Я предполагаю, что могу использовать BehaviorRelay из RxRelay , но я не уверен, что это лучший подход, учитывая обсуждение в этого вопроса .

Итак, мой вопрос: каков наилучший способ сделать это в RxJava (включая изменение рабочего процесса, если это лучшее решение)?

...