RxJava2:在mapper函数中是否允许链接?

时间:2018-04-10 11:34:39

标签: kotlin rx-java

在函数f returns Single<String>下面的代码中,

   Observable.map { line ->
              f(line).doOnError { e ->
                    println("Error:$e")
                }
        }
        .subscribe({ record -> println(record) }, { e -> println("Error2:$e") })
地图内的

println("Error:$e")不会执行,但是我将能够在订阅者中打印错误。它看起来像mapper函数中的链接不允许。这是对的吗?如果是,为什么?

编辑:也尝试过flatmap,但结果相同。

   Observable.flatmap { line ->
              f(line).toObservable().doOnError { e ->
                    println("Error:$e")
                }
        }
        .subscribe({ record -> println(record) }, { e -> println("Error2:$e") })

1 个答案:

答案 0 :(得分:1)

这可以按预期工作:

@Test
public void test() {
    Observable.just(1)
    .flatMap(v -> single(v)
            .toObservable()
            .doOnError(w -> System.out.println("Error2 " + w))
    )
    .subscribe(v -> System.out.println(v), e -> System.out.println("Error " + e));
}

Single<Integer> single(Integer v) {
    return Single.error(new IOException());
}

打印:

Error2 java.io.IOException
Error java.io.IOException