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

考虑以下情况


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


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

这是我尝试过的

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


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

这些主题由不同的对象控制,并以通常的方式调用

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


请提出是否有可能实现我的想法,或者是否有更好的方法来实现这一目标?

谢谢。

最佳答案

您可以使用“主题”将一个可观察到的发射链接到另一个

@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);
}


这里可观察到的将项目传递给publishSubject,并将publishSubject传递给publishSubject2

您可以在https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/connectable/HotObservable.java上查看更多热观测的示例

10-07 18:46