我试图在ngrx/effect
中使用我的服务以在请求时加载数据,但是为了提高效率而缓存了请求。我已经阅读了一些示例,这些示例使用这种方法存储可观察的对象,并在存在的情况下再次将其返回,并给出publishReplay
refCount
重做请求的响应而不发送请求。
这一切似乎都可以正常工作-但是在第一个请求之后,如果我重新使用缓存的可观察对象,Angular
路由器将停止工作。从阅读中又可以看出,到底是什么在等待观察者的诺言完成?
如何设置服务使用情况才能正确解决?
我有一个帮助服务,用于从我的API中获取数据,我正在尝试缓存这样的响应:
getResource(params) {
if (!this.cache[cacheKey]) {
this.cache[cacheKey] = this.api.get(RESOURCE_URL, params)
.pipe(
publishReplay(1),
refCount(),
);
}
return this.cache[cacheKey];
}
(api服务上的get方法看起来像这样)
get(resource, params?: object): Observable<ApiResponse> {
return this.http.get<ApiResponse>(resource, params);
}
效果如下:
@Effect()
search$: Observable<Action> = this.actions.pipe(
ofType<Search>(Types.SEARCH),
debounceTime(300),
withLatestFrom(this.store.select(state => state.search_properties)),
distinctUntilChanged(),
switchMap(([payload, store]) => {
this.store.dispatch(new GlobalActions.SearchStarted());
const params = merge({include: ['latestPrint']}, store);
return this.lookupService
.getResource(params)
.pipe(
map((response: ApiResponse) => {
this.store.dispatch(new GlobalActions.SearchComplete());
return new ResultActions.SetSearchResults(response);
}),
catchError(() => of(new GlobalActions.EffectError()))
);
})
);