Angular 2 - 缓存http获取结果

标签 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() 时都请求后端。

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

最佳答案

你可以像这样缓存它:

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
}

关于Angular 2 - 缓存http获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38374769/

相关文章:

angular - Ionic 2 "Can' t解析所有参数”导入组件时

javascript - Angular 2+ http 错误处理

angular - Angular2 运行时如何包含脚本标签?

javascript - Angular 6 和 Angular Material - mat-radio-group [(ngModel)] 在 *ngFor 内设置动态变量

angular - 在 angular2 中使用 Rxjs 连接分页响应

javascript - RxJs:如何在接收到流时更改订阅的 "listen"?

Angular 发出两次 http 请求

angular - 如何检查 Angular2 的 http.response 中的空响应主体?

Angular Mat 树重新渲染性能问题需要太多时间

angular - 如何在 Angular2\Typescript 中将字符串转换为日期?