在等待接收网络请求时,如何立即生成以前的缓存值?
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
运行请求,以便用户立即看到建议,但在请求终止后也会获得更新的列表。
上面的代码在订阅时不会产生任何元素。我错过了什么?