代码之家  ›  专栏  ›  技术社区  ›  O10

与observeOn组合时,RxJava启动时忽略运算符

  •  2
  • O10  · 技术社区  · 6 年前

    我有这样一个简单的流:

    Observable.error<Int>(Exception()).startWith(1).subscribe {
            println("Item is $it")
        }
    

    一切正常。首先用整数1调用onNext,然后抛出exception,但当我通过添加observeOn更改流时,如下所示:

    Observable.error<Int>(Exception()).startWith(1).observeOn(AndroidSchedulers.mainThread()).subscribe {
            println("Item is $it")
        }
    

    从不调用onNext。仅引发异常。我错过了什么?

    1 回复  |  直到 6 年前
        1
  •  5
  •   Sandip Fichadiya    6 年前

    来自observeOn文档

    请注意,onError通知将先于onNext通知进行剪切 如果调度器是真正异步的,则在发射线程上。

    这意味着当您应用它时,onError将首先发出&因此,由于onError,流已结束,因此不会调用onNext。

    您可以执行以下操作以首先接收onNext

    observeOn(AndroidSchedulers.mainThread(), true)
    

    这告诉我们 Observable 将错误延迟到 onNext 已通过startWith的