2
我正在創建一個Angular應用程序並擁有API服務。如果請求的數據不在緩存中,我的get
方法只會進行HTTP調用。我正在使用基於Promise的LocalForage庫,並將它們轉換爲Observables。RxJS Observables,在發出API請求之前檢查緩存
export class CacheService {
get(prop: string) {
return Observable.fromPromise(localForage.getItem(prop));
}
在我的API服務
現在,我的賽車我的緩存和HTTP可觀,像這樣:
export class ApiService {
get(uri: string) {
return Observable.race(
this.cache
.get(uri)
.filter(res => !!res),
this.http.get(uri)
);
}
}
由於Observable.race
只返回發射第一可觀察到的,我以爲只要我使用那個.filter()
運營商,一切都會解決。但是,如果數據不在緩存中,它們都不會返回,所以HTTP請求永遠不會被創建。如果有人能指出我的錯誤或提出更好的解決方案,我全都聽過。
哪裏是你的訂閱? –
@YakovFain謝謝你的回覆。我確定我的訂閱不是問題,因爲如果我刪除'.filter',那麼我得到的響應爲空,因爲緩存還沒有任何內容。 – yazeedb
@yazeedb嗯.... Observable.race行爲對我來說似乎很陌生。當其中一個源完成時(因爲https://github.com/ReactiveX/rxjs/blob/master/src/OuterSubscriber.ts#L20-L22),Federico Galassi在回答中提到了它會發送'complete'通知,但是,它猜測這不是預期的行爲。 – martin