Я пытаюсь создать реактивное приложение с 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(...)
на каждом шагу не круто.
Как лучше обрабатывать ошибки?