2017-07-25 20 views
0

としての取り扱いは、もはやヌル値を受け入れるdocs RxJava 2.xで説明していません。だから、次の2行の両方が呼ばonErrorで終了していることは驚くべきことではない:不明である何ヌルはRX-Java2のflatMapに

Observable.fromCallable(() -> null); 
Observable.just(1).flatMap(i -> Observable.error(new RuntimeException())); 

Observable.just(1).flatMap(i -> Observable.fromCallable(() -> null)) 

が成功し、放出されていない項目で終了する理由です。それは、私はそれがコードの面で起こっている理由を説明RX-javaの2.1.2

public final <R> Observable<R> flatMap(...) { 
    if (this instanceof ScalarCallable) { 
     @SuppressWarnings("unchecked") 
     T v = ((ScalarCallable<T>)this).call(); 
     if (v == null) { 
      return empty(); 
     } 
     ... 
} 

のソースコードに見ることができますObservable.error

と同じように振る舞うために期待するのは合理的な縫い目が、私はまだ二つの質問があります。

1)、これは意図した動作やバグですか?

2)これは理由がありますか?

答えて

1

これはObservable.fromCallableのバグであるとPR 5517で固定されます。何らかの理由であなたは、このセットアップでヌルリターンを避けることができない、場合

、あなたはこのバグを回避するためにhide()を適用することができます。

Observable.just(1).flatMap(i -> Observable.fromCallable(() -> null).hide()) 

をかRxJavaを投げるのに役立ちます。

Observable.just(1) 
    .flatMap(i -> Observable.fromCallable(() -> 
     java.util.Objects.requireNonNull(apiReturningNull())) 
    )