Angular 使用新的Ngrx 8 createEffect模式时多次触发的服务方法

Angular 使用新的Ngrx 8 createEffect模式时多次触发的服务方法,angular,ngrx,ngrx-effects,Angular,Ngrx,Ngrx Effects,在将一些特性效果切换到新的createEffct模式之后,它们调用的所有服务请求现在都在我的控制台输出中触发了两次 行动如下: export const getSetting=createAction “[从业者设置]获取设置”, 道具, ; 下面是一个使用旧语法的效果示例: @影响 getSetting$:可观察到: @影响 getSetting=createEffect=> 这是烟斗 OfTypePractices设置Actions.getSetting, 合并映射{name}=>{ 返回此

在将一些特性效果切换到新的createEffct模式之后,它们调用的所有服务请求现在都在我的控制台输出中触发了两次

行动如下:

export const getSetting=createAction “[从业者设置]获取设置”, 道具, ; 下面是一个使用旧语法的效果示例:

@影响 getSetting$:可观察到:

@影响 getSetting=createEffect=> 这是烟斗 OfTypePractices设置Actions.getSetting, 合并映射{name}=>{ 返回此.practitionersetingservice .getSettingname 管 mapresponse=>PractitionerSettingsActions.getSettingSuccess{setting:response}, }, ; 我怀疑是mergeMap操作符导致了这种行为,因为这是两者之间的唯一区别,但我不确定为什么会导致这种情况,或者如何以另一种方式访问操作的有效负载

我没有对我的应用程序做任何其他更改,只是将Ngrx操作、减缩器和效果更新到v8模式,这将导致服务调用执行两次


如果没有mergeMap,我应该使用哪个操作员访问操作负载?如果mergeMap是正确的,为什么我的效果会运行不止一次呢?

如果您检查您链接的示例,@Effect注释不存在,并且出现在问题代码中。我认为这就是它以这种方式为您工作的原因

作为测试,您可以在某个地方添加this.actions.subscribeaction=>console.logaction吗?这样,如果您的行为多次触发,您可以缩小范围。switchMap一次只允许一个内部订阅处于活动状态。一旦有新的内部订阅,它就会取消任何活动的内部订阅。mergeMap没有相同的取消效果。每个内部订阅都将运行。让我给出一个tryI,它向我的每个服务方法添加了一个log语句。将mergeMap更改为switchMap会产生相同的结果。对于效果调用的每个方法,我仍然在控制台中看到我的日志语句两次。为了验证,我切换到我的开发分支,使用旧模式运行代码,每个服务方法只看到一个日志语句。为了向其他方法澄清。当您使用createEffect时,您不再需要@Effect decoratorI。我们只使用createEffect而不使用@Effect。您是否在任何地方注册了effects类?