[英]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 中的以下链接所述:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.