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