【问题标题】:RxJava exeute multiple observables in a chain only on successRxJava 仅在成功时才在链中执行多个 observable
【发布时间】:2017-09-07 13:52:00
【问题描述】:

我正在尝试实现以下想法。

考虑以下情况

  1. 提示用户输入字段
  2. 如果用户输入了某些内容,则会出现另一个对话框以确认之前的操作
  3. 如果用户确认了他的操作,则调用服务。

如果这可以在链中使用 RxJava 实现,那将是非常优雅的。

这是我尝试过的

PublishSubject<String> inputSubject = ...;
PublishSubject<Boolean> confirmSubject = ...;
PublishSubject<Integer> serviceSubject = ...;

我需要在链中运行这些主题,并且只有在前一个主题成功并且没有返回错误的情况下才应该执行下一个主题。

这些主体由不同的客体控制,像这样以普通方式调用

    dialogSubject.onNext(userInput);
    dialogSubject.onCompleted();

请建议是否有可能实现我的想法,或者是否有更好的方法来实现这一点?

谢谢。

【问题讨论】:

    标签: java rx-java observable rx-android


    【解决方案1】:

    您可以使用 Subject 将一个 observable 的发射链接到另一个

    @Test
    public void chainObservables() throws InterruptedException {
        Observable<Long> observable = Observable.just(1l);
        Subject<Long, Long> publishSubject = ReplaySubject.create(1);
        Subject<Long, Long> publishSubject2 = ReplaySubject.create(1);
        observable.subscribe(publishSubject);
        publishSubject.subscribe(publishSubject2);
        publishSubject2.subscribe(System.out::println, (e) -> System.err.println(e.getMessage()), System.out::println);
    }
    

    这里 observable 将 item 传递给 publishSubject 并将 publishSubject 传递给 publishSubject2

    您可以在 https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/connectable/HotObservable.java 处查看更多 Hot observables 示例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-10
      • 1970-01-01
      • 1970-01-01
      • 2019-07-21
      • 2012-07-01
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      相关资源
      最近更新 更多