JavaRX:如何立即并行地返回缓存值执行网络请求

时间:2017-11-03 17:06:21

标签: java kotlin rx-java reactive-programming

在等待接收网络请求时,如何立即生成以前的缓存值?

    val suggestionsCache = mutableMapOf<String, List<Suggestion>>()

    override fun requestSuggestions(queryString: String, queryLocation: Location): Observable<List<Suggestion>> {
        return Observable.merge(
                getCached(queryString),
                placesService
                        .requestSuggestions(queryString, queryLocation)
                        .doOnNext { cache(it, queryString) })
    }

    private fun getCached(queryString: String): Observable<List<Suggestion>?>? {
        return if (suggestionsCache.containsKey(queryString)) Observable.just(suggestionsCache[queryString]) else Observable.never<List<Suggestion>>()
    }

    private fun cache(suggestions: List<Suggestion>, queryString: String) {
        suggestionsCache[queryString] = suggestions
    }

关于requestSuggestions方法。如果可能的话,它应该立即从缓存中产生结果并仍然向placeService运行请求,以便用户立即看到建议,但在请求终止后也会获得更新的列表。

上面的代码在订阅时不会产生任何元素。我错过了什么?

0 个答案:

没有答案