Лучший способ обрабатывать ошибки с Monix Observable - PullRequest
1 голос
/ 10 апреля 2019

Я пытаюсь создать реактивное приложение с monix 3.0.0-RC1.

Например, у a есть Seq of Int, а второй элемент неправильный. Я могу использовать Oservable.raiseError(...), чтобы справиться с этим:

  Observable.fromIterable(Seq(1,2,3))
    .flatMap( i =>
      if (i == 2) Observable.raiseError(new Exception("Wrong i"))
      else Observable.pure(i)
    )
    .doOnNext(i => println(s"Processing $i"))
    .foreachL(i => println(s"Finished $i"))
    .onErrorHandle(_ => Task.unit)

Мне не нравится выброшенное исключение в коде выше.

В другой руке я могу использовать Scala's Either:

Observable.fromIterable(Seq(1,2,3))
  .map( i =>
    if (i == 2) Left("Wrong i")
    else Right(i)
  )
  .doOnNext(either => either.map( i => println(s"Processing $i") ))
  .foreachL(either => either.map( i => println(s"Finished $i") ))

Но either => either.map(...) на каждом шагу не круто.

Как лучше обрабатывать ошибки?

...