私は RxJava を初めて使用し、エラー ケースの処理に苦労しています。アプリケーションは Kotlin にありますが、おそらく大きな違いはありません。シナリオは基本的にユーザー認証とアクションの実行ですが、ユーザーが承認されていないか、認証トークンが正しくない場合、例外を生成し、処理を中止したいと考えています。現在、トークンをチェックする関数があり、次のようになっています。
fun checkAuthority(authToken: AuthToken, requiredAuthority: Authority): Completable =
authorityRepository.getAuthorities(authToken)
.filter { it == requiredAuthority }
.switchIfEmpty { subscriber -> subscriber.onError(UnauthorizedException("must have '$requiredAuthority' authority")) }
.ignoreElements()
次に、パーミッションをチェックし、承認されている場合は操作を実行するはずの、このような機能があります。
fun create(model: EntityCreate, authToken: AuthToken): Single<Entity> =
checkAuthority(authToken, CAN_WRITE_ENTITY)
.andThen(entityRepository.insert(model, OffsetDateTime.now(clock)))
私が望むのは、UnauthorizedException が生成されて andThen が実行されない場合です。
おそらく、ドキュメントの理解にギャップがあるかもしれませんが、たとえばdoOnError
、Throwable を の前にスローしようとしましたandThen
。onErrorComplete
同じ場所で試しました。私が何をしても、andThen
最終的には実行されます。
ラインが実行された場合にCompletable
チェーンを放棄するパターンはどのようになりますか?subscriber.onError