2017-02-06 11 views
1

Observablesサービスを拡張してローカルストレージからデータを返すとします。角度2 Observable Service from localStorage

シナリオ: コンポーネントはService.GetAll()に加入し、GetAll()はデータを取得するためにlocalStorageを検索します。見つからない場合は、取得するためにAPI呼び出しを行います。

私はこの使用して約束を行うために管理が、私はいくつかのいずれかが、私は同じことを行うには、サービスの下に拡張することができますどのように私を見ることができる場合

getAll(): Promise<IScheduleFrequency[]> { 
    let ScheduleFrequencies: IScheduleFrequency[] = this.storageService.get('ScheduleFrequencies'); 
    if (ScheduleFrequencies != null) { 
     return Promise.resolve(ScheduleFrequencies); 
    } else { 
     return this.http.get(this.apiUrl) 
      .toPromise() 
      .then((response) => { 
       let ScheduleFrequencies: IScheduleFrequency[] = response.json(); 
       this.storageService.save('ScheduleFrequencies', activityScheduleFrequencies); 
       return ScheduleFrequencies || []; 
      }) 
      .catch(this.handleError); 
    } 
} 

適切なを観測するためにそれを変換することを好みます。

getAll(): Observable<TransactionStatus[]> { 
    return this.http.get(this.apiUrl) 
     .map(this.extractData) 
     .catch(this.handleError); 
} 

ありがとう Asanka

更新 'の/観測可能/追加/ rxjs' インポート 'の' それがインポートする必要が働く返信をnzjun90 @ありがとう。

答えて

5

明確化が必要な場合はお知らせください。

getAll(): Observable<TransactionStatus[]> { 
    let ScheduleFrequencies: IScheduleFrequency[] = this.storageService.get('ScheduleFrequencies'); 

    if (ScheduleFrequencies != null) { 
     return Observable.of(ScheduleFrequencies); 
    } 

    return this.http.get(this.apiUrl) 
    .map((response)=>{ 
       let ScheduleFrequencies: IScheduleFrequency[] = response.json(); 
       this.storageService.save('ScheduleFrequencies', activityScheduleFrequencies); 
       return ScheduleFrequencies || []; 
    }).catch(e => {return this.handleError}); 
} 
関連する問題