【发布时间】:2018-07-12 12:15:29
【问题描述】:
我有一项服务向我无法控制的后端发出 http 请求以获取营销页面内容。有时,我需要同时加载多个营销内容。我可以创建一个调用服务的效果。
@Effect()
marketingContent$ = this.actions$
.ofType(LOAD_MARKETING_CONTENT)
.switchMap(({ payload }) => this.marketingService.getContent(payload)
.map(content => Action.LoadMarketingContentComplete(content))
)
这很好,我可以打电话给store.dispatch(Action.LoadMarketingContent('A'))。
问题是,如果我需要一次加载多个营销内容,.switchMap 将取消之前的请求。
store.dispatch(Action.LoadMarketingContent('A'));
store.dispatch(Action.LoadMarketingContent('B'));
// Only `'B'` is loaded since 'A' gets canceled before it completes
我可以使用.mergeMap 代替.switchMap,但是重复的请求不会被取消。
我还可以使用单独的操作来加载每条营销内容,但这需要为每条内容创建一个操作和效果。
有没有一种方法可以让我使用.switchMap 只取消对相同内容的请求(payload 是相同的?)或另一种方法在取消同一流中的重复请求的同时发出不同的请求?
【问题讨论】:
标签: angular typescript rxjs observable ngrx