ReactiveX / RxAndroid

RxJava bindings for Android
Apache License 2.0
19.89k stars 2.94k forks source link

Skip onNext() when observeOn(AndroidSchedulers.mainThread()) #367

Closed YiiGuxing closed 7 years ago

YiiGuxing commented 7 years ago
Observable
        .concat(Observable.range(0, 20), Observable.error(new IllegalStateException()))
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(next -> Log.d("RX", "onNext" + next),
                error -> Log.e("RX", "onError"));

It just print onError, why not onNext0...19 -> onError? Any help? Thanks.

artem-zinnatullin commented 7 years ago

Because Observable.concat() by default emits error without emitting values, please try Observable.concatDelayError().

YiiGuxing commented 7 years ago

@artem-zinnatullin :

Observable.concatDelayError(Arrays
        .asList(Observable.range(0, 20), Observable.error(new IllegalStateException())))
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(next -> Log.d("RX", "onNext" + next),
                error -> Log.e("RX", "onError"));

just onError.

JakeWharton commented 7 years ago

observeOn fast tracks errors. You can supply a boolean to disable this behavior. Closing as not RxAndroid related. For usage questions please use StackOverflow or the RxJava mailing list.