RxJava - испускает при смене третьего источника - PullRequest
0 голосов
/ 16 апреля 2019

На самом деле у меня есть что-то подобное

Observable.combineLatest(presenter.getSomething1(), fragmentVisibility, Pair::create)
  .compose(bindToLifecycle())
  .observeOn(AndroidSchedulers.mainThread())
  .subscribe(this::trackPage, this::error));

, где getSomething1 () дает некоторую информацию, необходимую для отслеживания моего фрагмента, и на самом деле это работает довольно хорошо.

Но мне нужно добавить еще одну наблюдаемуюисточник, потому что мне нужно больше информации из другого наблюдаемого.В случае сlateLatest и 3 источниками, trackPage () вызывается дважды ..

Есть ли такой оператор, как "эмитировать только при третьем наблюдаемом изменении"? или что-то подобное, что позволило бы мнеотслеживание из 3 источников и создание нового отслеживания только при изменении видимости.

Спасибо!

1 Ответ

0 голосов
/ 16 апреля 2019

Я не совсем уверен, правильно ли я понял ваш сценарий, но, возможно, вы можете связать combineLatest с новой наблюдаемой, используя zipWith. zipWith будет выдавать значение (применяя любую комбинацию излучаемых значений, которую вы хотите) всякий раз, когда combineLatest испускает значение и , третье наблюдаемое тоже выдает значение. (документация RxJava zip)

Observable.combineLatest(presenter.getSomething1(), fragmentVisibility, Pair::create)
  .zipWith(thirdObservable(), (pairEmissionFromCombineLatest, emissionFromThirdObservable) {
    // Combine the emissions and emit a new value (Here I am just re-emitting the emitted value of the combineLatest observable
     return pairEmissionFromCombineLatest;
   })
  .compose(bindToLifecycle())
  .observeOn(AndroidSchedulers.mainThread())
  .subscribe(this::trackPage, this::error));
...