繁体   English   中英

服务在 NgRx Effect 中被多次调用

[英]Service is called multiple times inside NgRx Effect

当我发送一个动作时,服务在效果中被多次调用,我每次都必须在所有效果中使用“exhaustMap”而不是“concatMap”或“mergeMap”,我不知道它是怎么突然发生的,因为它是之前可以。 而且我知道我不会在一次之前发送一个动作,但它会多次调用该服务(在本例中是两次)。

我像这样在联系人模块中导入了效果:

EffectsModule.forFeature([PersonalContactEffects]),
StoreModule.forFeature(personalContactFeatureKey, personalContactReducer)

效果是:

        loadPersonalContacts$ = createEffect(
        () => this.actions$.pipe(
            ofType(personalContactActions.loadPersonalContactsList),
            tap(action => console.log("before service call", action)),
            concatMap(action => this.contactService.getList(action.query)),
            map(personalContactList => personalContactActions.personalContactsListLoaded({ personalContactList })),
            catchError(() => of(personalContactActions.setLoading({ loading: false })))
        )
    );

我像这样发送这个动作:

this.store.dispatch(fromPersonalContactActions.loadPersonalContactsList({ query }));

在此处输入图像描述

在此处输入图像描述

除了上面的问题,我注意到每次调度一个动作时,每个 Reducer 都会被调用两次。 所有这些问题都发生在我将“StoreModule.forFeature”导入其他延迟加载模块时。

最后我找到了答案,这是因为

StoreDevtoolsModule.instrument({...})

在 appModule 中,我对其进行了评论,因此它不会在 effects 中两次调用服务,也不会两次调用 reducer。 如 github 中的以下链接所述:

https://github.com/ngrx/platform/issues/1054

https://github.com/ngrx/platform/issues/1325

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM