我目前正在尝试使用java中的反应式扩展来实现特定结果,但是我无法这样做,也许有人可以帮助我。
firstCompletable
.onErrorComplete(t -> specificErrorHandlingOne())
.andThen(secondCompletable())
.onErrorComplete(t -> specificErrorHandlingTwo())
.andThen(thirdCompletable())
.onErrorComplete(t -> specificErrorHandlingThree())
.andThen(fourthCompletable())
.onErrorComplete(t -> specificErrorHandlingFour())
.subscribe(viewCallback::showSuccess)
但是,当例如第二个完成时出现错误时,正在执行特定的错误处理,但是仍然正在调度其他的Completables。如果其中一个Completables失败,我希望整个Completables链停止执行。我该怎么做?
我已经尝试过使用doOnError,但这只是在抛出特定错误的堆栈跟踪上结束。
答案 0 :(得分:5)
Completable.concat(
completable1.doOnError(e -> {...}),
completable2.doOnError(e -> {...}),
completable3.doOnError(e -> {...}),
completable4.doOnError(e -> {...})
).subscribe(action, errorConsumer);
action
errorConsumer
)您的原始andThen
链也可以使用,但您需要将onErrorComplete
替换为doOnError
替换完成错误,false
只调用指定的操作。或者只是从specificErrorHandlingXxx()
返回<script type="text/babel">
import $ from 'jquery'
require('x-editable')
</script>
。
答案 1 :(得分:1)
尝试以下方法:
public static void main(String[] args) {
System.out.println("start");
Completable c1 = Completable.fromAction(() -> printAndWait(1, 1));
Completable c2 = Completable.fromAction(() -> printAndWait(2, 2));
Completable c3 = Completable.fromObservable(Observable.timer(3, TimeUnit.SECONDS).concatWith(Observable.error(new RuntimeException())));
Completable c4 = Completable.fromAction(() -> printAndWait(4, 2));
c1.concatWith(c2).concatWith(c3).concatWith(c4).subscribe(e -> e.printStackTrace(), () -> System.out.println("done"));
printAndWait(10, 10);//dont exit till program is completely executed
}
private static void printAndWait(int i, int j) {
System.out.println(i);
Observable.timer(j, TimeUnit.SECONDS).toBlocking().subscribe();//just add delay
}