如何在RxJava2中错误地终止开关图的序列

我正试图在RxJava2和Kotlin中实现一个刷新令牌流,并且在处理错误时遇到了问题。 有几个请求需要按顺序完成,但是如果有一些错误,顺序会有所不同。

基本上,如果我尝试使用我的刷新令牌并接收400 - Bad Request响应,因为令牌无效,我需要终止流并且不执行下一个switchMap (理想情况下,我想返回最终的Observable )。 但我不知道如何做到这一点。

如果我使用onErrorReturn ,我只是将返回的结果传递给下一个切换映射。 而doOnError只是在请求失败的时候执行这个步骤,但是整个序列还在继续。

 fun refreshToken(): Observable { // 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 } } 

有没有人知道如果发生错误,谁跳出了开关图的序列?

One Solution collect form web for “如何在RxJava2中错误地终止开关图的序列”

也许你应该这样做:

 fun refreshToken(): Observable { return authRepository.refreshToken(token) .switchMap { response -> userRepository.getUser() } .switchMap { response -> // do something with user response } .map { ApplicationRoot.ROOT_THAT_MEANS_SUCCESS } .onErrorResumeNext(Observable.just(ApplicationRoot.LOGIN)) } 

我不知道authRepository.refreshToken实现以及responses如何,但如果response是您的自定义对象,而不是retrofit2.Response它应该工作。

  • Android中的Kotlin“内部”​​可见性修改器
  • Kotlin属性与getter。 我可以不指定初始值吗?
  • 创建XML文件时出现卡顿exception
  • 在kotlin测试
  • Kotlin androidTest:测试运行完成。 空的测试套件
  • 在Kotlin的构造函数中为参数添加一个私有修饰符有什么不同?
  • 如何修复在Kotlin中创建一个Spinner的时候,在一个Fragment的旋转屏幕上指定为非null的参数为null?
  • 在Kotlin中为variables使用“m”前缀
  • 我们如何才能在android中使用kotlin实现基础适配器?
  • Varargs Kotlin Java互操作不正常
  • IllegalStateException textview不能在Kotlin中为null
  • Kotlin language will be the best programming language for Android.