首页 > 解决方案 > 仅当使用改造 rxjava 的第一个 api 调用失败时如何进行另一个 api 调用

问题描述

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

我如何使用改造和 rxjava 来实现这一点。

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

标签: androidkotlinretrofit2rx-java2

解决方案


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)

推荐阅读