我试图在RxJava2和Kotlin中实现刷新令牌流,但在处理错误时遇到了问题。有几个请求需要按顺序执行,但如果出现一些错误,顺序会有所不同。
基本上,如果我尝试使用刷新令牌并接收
400 - Bad Request
响应因为令牌无效,我需要终止流,并且不执行下一个
switchMap
(理想情况下,我想返回决赛
Observable<ApplicationRoot>
). 但我不知道如何做到这一点。
如果我使用
onErrorReturn
,我将把返回的结果传递给下一个开关映射。和
doOnError
当请求失败但整个序列继续时,只执行该步骤。
fun refreshToken(): Observable<ApplicationRoot> {
// try to use the refresh token to obtain an access token
return authRepository.refreshToken(token)
.switchMap { response ->
// process response here
userRepository.getUser() // fetch user details
}.doOnError {
// TODO - return final result, do not jump to next switchMap
// refresh token is not valid -> go to login screen
Observable.just(ApplicationRoot.LOGIN) // not working
}.switchMap { response -> // excpects response of type UserResponse
// save user details here
}
}
如果发生错误,有人知道谁应该跳出开关映射序列吗?