RxJava / RxKotlin-并且如果上一步失败,则仍然执行。如何停止?

时间:2018-07-18 13:22:05

标签: kotlin rx-java2 rx-kotlin2

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

0 个答案:

没有答案