我是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
链?