请注意,这里获得更多选票的答案有点误导。看下面的例子,我的想法是展示一些测试场景,并展示带有运算符andThen 的可完成逻辑的行为。
private fun doThingAFail(): Completable {
print("Do thingA Called\n")
return Completable.fromCallable {
print("calling stream A\n")
throw(Exception("The excep"))
}
}
private fun doThingB(): Completable {
print("Do thingB Called\n")
return Completable.fromCallable {
print("calling stream B\n")
}
}
private fun doThingA(): Completable {
print("Do thingA Called\n")
return Completable.fromCallable {
print("calling stream A\n")
}
}
请注意以下测试:
@Test
fun testCallAPlusB() {
doThingA().andThen(doThingB())
}
输出将是:
Do thingA Called
Do thingB Called
此处快速说明:请注意,我们没有在此 sn-p 中订阅这些 Completable。
为了测试:
@Test
fun theTestSubscribe() {
doThingA().andThen(doThingB()).subscribe()
}
输出将是:
Do thingA Called
Do thingB Called
calling stream A
calling stream B
最后,如果第一个 Completable 失败,第二个 Completable 将不会被执行。
@Test
fun theTestFailThingA() {
doThingAFail().andThen(doThingB()).subscribe()
}
输出将是:
Do thingA Called
Do thingB Called
calling stream A
这里的关键概念是方法内部和可观察对象内部的逻辑不是同时执行的。
一旦我们调用 doThingA() 和 doThingB() 方法,将打印“Do thingA Called”和“Do thingB Called”行。而“调用流A”和
只有当有人订阅 doThingA 和 doThingB 方法时,才会调用“调用流 B”行。
这里的第二个概念是 andThen 运算符将如何处理错误。在上面的示例中,如果doThingA() completable 以错误结束,流将结束并且不打印“调用流 B”行。