大佬教程收集整理的这篇文章主要介绍了angular – 取消基于有效负载而非效果的可观察性,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@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来取消对相同内容的请求(有效负载相同?)或同时在同一流中取消重复请求时同时发出不同请求的方法?
@Effect() markeTingContent$= this.actions$ .ofType(LOAD_MARKETinG_CONTENT) .mergeMap(({ payload }) => this.markeTingservice .getContent(payload) .map(content => Action.LoadMarkeTingContentComplete(content)) .takeUntil(this.actions$.ofType(CANCEL_MARKETinG_CONTENT)) );
基本上,这可以让您根据需要加载任意数量的营销内容,但是在您发送LOAD_MARKETinG_CONTENT操作之前,您可以通过调度CANCEL_MARKETinG_CONTENT操作来取消任何挂起的加载.
例如,要仅加载A部分,您可以这样做:
store.dispatch(Action.CancelMarkeTingContent()); store.dispatch(Action.LoadMarkeTingContent('A'));
要加载A和B,你可以这样做:
store.dispatch(Action.CancelMarkeTingContent()); store.dispatch(Action.LoadMarkeTingContent('A')); store.dispatch(Action.LoadMarkeTingContent('B'));
实际上,有一种类似但更整洁的方式,它不涉及使用其他动作.
您可以使用与取消触发器相同的有效负载调度相同的操作.例如:
@Effect() markeTingContent$= this.actions$ .ofType(LOAD_MARKETinG_CONTENT) .mergeMap(({ payload }) => this.markeTingservice .getContent(payload) .map(content => Action.LoadMarkeTingContentComplete(content)) .takeUntil(this.actions$ .ofType(LOAD_MARKETinG_CONTENT) .skip(1) .filter(({ payload: next }) => next === payload) ) );
从内存中,需要跳过跳过效果当前处理的操作.答案假设有效载荷是“A”或“B”等.
以上是大佬教程为你收集整理的angular – 取消基于有效负载而非效果的可观察性全部内容,希望文章能够帮你解决angular – 取消基于有效负载而非效果的可观察性所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。