0

私は 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 を の前にスローしようとしましたandThenonErrorComplete同じ場所で試しました。私が何をしても、andThen最終的には実行されます。

ラインが実行された場合にCompletableチェーンを放棄するパターンはどのようになりますか?subscriber.onError

4

0 に答える 0