【发布时间】:2018-10-01 14:37:19
【问题描述】:
我目前正在开发一个 Angular 5 应用程序,该应用程序将在 ngrx-store 中使用一些缓存策略,以允许用户查看项目并返回主列表而无需再次发出请求。
我正在使用 Effect 来请求数据并使用 reducer 根据我的 htp 响应更新我的全局状态。如您所见,成功时触发 RequestPartnersSuccess 操作,错误时触发 RequestPartnersFail。
我的全局状态中的属性“internalAppDynamic.searchPartners.recoverLatest”指示我是否应该从缓存中恢复我的列表,在这种情况下,效果应该在这个“if”语句中返回一个方法并完成我的流。
@Effect()
loadPartners$ = this.actions$
.ofType(SearchPartnersActions.REQUEST_PARTNERS)
.withLatestFrom(this.store$, (action, state) => {
action = Object.assign(action, {recoverLatest: state.internalAppDynamic.searchPartners.recoverLatest})
return action
})
.pipe(switchMap((action: any) => {
if (action.recoverLatest) {
return new SearchPartnersActions.RequestPartnersRecoverCache()
}
return this.internalPartnersService.getPartners(action.payload).pipe(
map(partners => new SearchPartnersActions.RequestPartnersSuccess(partners)),
catchError(error => of(new SearchPartnersActions.RequestPartnersFail(error)))
)
}))
这是我的服务中的 getPartners() 函数:
getPartners (body): Observable<any> {
return this.http
.post(this._baseUrl + 'internal-app/get-partners', body, this.httpOptions)
.pipe(catchError((error: any) => this.errorHandler(error)))
}
问题是我找不到实现这个结果的方法。我是 rxjs 和 Observables 的新手,我认为 switchMap 运算符期望另一种返回,而不是我的 SearchPartnersActions.RequestPartnersRecoverCache() 类的新实例。
我可以做些什么来达到预期的效果?有人可以更好地向我解释一下这个 Observable 流的期望是什么吗?
谢谢!
【问题讨论】:
标签: angular rxjs angular5 ngrx ngrx-effects