Category: RxJava

  • RxJava与常见控制结构

    在编程语言里面,控制结构是比较基础的一块内容。常见的是顺序,分支和循环。部分语言有try catch finally结构等。在使用RxJava时,如何对应既有的控制结构,或者说既有代码如何转换成RxJava的代码,是学习RxJava时必须熟练掌握的东西。 顺序结构 在三种常见控制结构里面,顺序其实是比较难的一种结构。比如说以下两行顺序代码 a = operation1() b = operation2(a) 和另外一类顺序代码 a = operation1() b = operation2() operation2是否需要上一行操作的结果对如何转换成RxJava的代码有很大的影响。 对于第一种有依赖关系的代码来说,需要使用flatMap Single<A> operation1() {…} Single<B> operation2(A a) {…} operation1 .flatMap(a -> operation2(a)) 因为有依赖关系,operation2不能与operation1同时进行。 相反,如何operation2不依赖operation1的结果的话,理论上可以同时执行。 比如说上面第二类顺序代码 Single<A> operation1() {…} Single<B> operation2() {…} Single.zip(operation1(), operation2(), (a, b) -> {…}) 这里通过zip让两个操作同时进行。这是一般顺序代码难以表达的结构。 不过,仍旧存在一类代码,虽然两个操作没有直接依赖关系,但是隐藏着第一个操作失败之后,第二个操作不应该执行的错误依赖要求。对于这类代码,就不应该使用zip让两个操作并行,你需要退回flatMap的方式。 分支结构 分支结构相对简单,比如说最常见的单个if if(condition) { // do something…