angular 2 - 缓存http获取结果

时间:2016-07-14 12:52:02

标签: angular angular2-http

我有一个LanguageService,提供可用语言列表。 此列表需要通过后端请求进行初始化:

getAvailableLanguages(): Observable<Language[]> {
    ...
    return this.http.get(ApiResources.LANGUAGE, requestOptions)
            .map(response => this.extractJson(response))
            .catch(error => this.handleError(error));
}

我希望每次有其他服务调用languageService.getAvailableLangauges()时都避免请求后端。

什么是缓存必要的第一个请求的结果的好方法?

1 个答案:

答案 0 :(得分:3)

您可以像这样缓存它:

import { Observable } from 'rxjs/Observable'
import 'rxjs/add/observable/of'

// ...

getAvailableLanguages(): Observable<Language[]> {
  return this._data ? Observable.of(this._data) : this.http.get(ApiResources.LANGUAGE, requestOptions)
          .map(response => this.extractJson(response))
          .catch(error => this.handleError(error))
}

其中this._data是缓存的响应,可由extractJson设置:

extractJson(res) {
  let json = res.json()
  // something, set this._data ...
  return this._data
}