如何对多个函数调用 return 相同 运行 observable?

How to return same running observable for multiple function calls?

我有一个 returns Observable 的方法,它执行 API 调用,它是应用程序许多地方的多个 observable 的一部分(因为它们使用相同的数据)。目前,即使我正在缓存 API 调用的结果,它也会同时多次调用 returns Observable to API 的方法。在这种情况下,应用程序正在执行多个请求。 我如何才能 return 相同的 API 正在进行的(或可观察到的)调用,以便同时只有一个正在进行的 API 调用?

下面的示例代码:

  var cache: ApiResponse? = null 
  fun getApiCall() : Observable<ApiResponse> {
    return if(cache != null) {
      Observable.just(cache)
    } else {
      Observable.just(retrofitClient.doApiCall())
          .map {
            doSomeStuffWithOutput()
            cache = it
          }
    }
  }

我想到了 CompositeDisposable 或 .cache() 运算符,但问题是它是否是可观察链的一部分并在方法调用中订阅它更高,并且此方法用于多个 Observables。

看来这个article会有帮助!

它将 API 调用的 Observables 保存在一个 Map 中,并且 returns 与以后的 API 调用相同。

如果适合你,请为作者鼓掌