仅当使用翻新rxjava的第一个api调用失败时,如何进行另一个api调用

时间:2019-05-15 17:58:27

标签: android kotlin retrofit2 rx-java2

我不熟悉翻新和rxjava。我正在尝试使用这两个实现非常普遍的用例,但找不到合适的操作员。用例-我正在进行API调用以检查我的访问令牌是否有效。如果它不再有效,我将获得401未经授权的异常,这时我想进行API调用以使用刷新令牌来获取新的访问令牌。 注意-两个API请求的响应类型都不同。

如何使用翻新和rxjava实现此目的。

我尝试使用flatMap,onErrorResume实现它,但无法找出最佳的实现方式。

1 个答案:

答案 0 :(得分:0)

requestApi.checkAccessToken(accessToken).flatMap(
     object : Function<Response, Observable<Response>> {
         override fun apply(t: Response): Observable<Response> {
            if (t.code() === 400) {
              return requestApi.getAccessToken(refreshToken,"refreshToken").flatMap(
               object : Function<LoginResponse, Observable<Response>> {
                 override fun apply(t: LoginResponse): Observable<Response> {
                        return requestApi.checkAccessToken(t.access_token)
            }
          })
       } else {
          return Observable.just(t)
       }
    }
 }).subscribeOn(Schedulers.io())
   .observeOn(AndroidSchedulers.mainThread())
   .subscribe(this::handleAccessTokenResponse, this::handleError)