连锁完成有条件

时间:2017-09-27 15:23:24

标签: java rx-java2

为什么RxJava如果在条件之后添加,将不会执行第三个可完成的(completable3)?

我注意到这不是链条似乎被打破的唯一情况,所以我想知道以下代码未按预期执行的根本原因。

Completable chain = completable1
    .andThen(completable2);

if(condition)
    chain.andThen(completable3);

chain.subscribe();

我知道我可以这样做:

completable1
    .andThen(completable2);
    .andThen(Completable.defer(() => {
        if(condition)
            return completable3;
        else 
            return Completable.complete();
    }))
    .subscribe();

1 个答案:

答案 0 :(得分:1)

RxJava中的运算符返回一个您应该继续编写的新实例,因此,忽略返回的Completable结果为no-op。你在第二个例子中做了正确的事。对于第一个示例,您可以使用andThen返回的已调制实例替换链引用:

Completable chain = completable1
    .andThen(completable2);

if (condition) {
    chain = chain.andThen(completable3);
}

chain.subscribe();