2016-07-14 2 views
2

사용 가능한 언어 목록을 제공하는 LanguageService가 있습니다. 이 목록은 백엔드 요청에 의해 초기화 할 필요가 :각도 2 - 캐시 http 결과 얻기

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

내가 백엔드 또 다른 서비스가 languageService.getAvailableLangauges() 호출 할 때마다 요청하지 않도록하고 싶습니다.

필요한 첫 번째 요청의 결과를 캐시하는 좋은 방법은 무엇입니까?

답변

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._dataextractJson에 의해 캐시 된 응답을 설정할 수 있습니다되는 경우 :

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

간단합니다 ... 감사합니다! – Philipp

+1

하지만 페이지 새로 고침을 수행하면 캐시되지 않습니다. –

+1

@FrancisManojFernnado 질문에 관한 내용이 아닙니다. 그러나 당신이 그것을 필요로한다면 간단한 접근은 sessionStorage를 사용하는 것입니다. 이 경우 나는 http 부분을 저장소를 먼저 검사하고 서비스중인 캐시 된 '_data'를 초기화하는 별도의 서비스로 추상화합니다. 또는 캐시를 사용할 수없는 경우 요청하십시오. – dfsq