ngrx effect-catchError:的返回不会结束流,API调用不会重新运行



我对NgRX效应有影响,如下所示:

$createOrganisation = createEffect(() =>
this.actions$.pipe(
ofType(fromOrganisationActions.createOrganisation),
switchMap((data) => this.organisation.createOrganisation(data)),
map((response) => fromOrganisationActions.createOrganisationSuccess({ orgId: response.id })),
catchError((error) => {
return of(fromOrganisationActions.createOrganisationError(error));
})
)
);

然而,当catchError被触发时,即在this.organisation.createOrganisation返回400错误的情况下,我的流似乎从未结束。

动作,fromOrganisationActions.createOrganisationError(error)被触发,我的减速器由此被触发。。。但如果我重新调用fromOrganisationActions.createOrganisation效果,则该效果会运行,但API调用不会再进行第二次。

如果我按照以下方式配置它,并手动调度它,它就会工作:

$createOrganisation = createEffect(() =>
this.actions$.pipe(
ofType(fromOrganisationActions.createOrganisation),
switchMap((data) => this.organisation.createOrganisation(data)),
map((response) => fromOrganisationActions.createOrganisationSuccess({ orgId: response.id })),
catchError((error) => {
this.store.dispatch(fromOrganisationActions.createOrganisationError(error));
return throwError(error);
})
)
);

但网上的其他例子表明,第一种方法应该有效,但它不适合我,我不明白为什么我的流永远不会结束。

有人能告诉我为什么我的流一开始就不会结束吗?

catchError应该添加到内部可观察对象中。

$createOrganisation = createEffect(() =>
this.actions$.pipe(
ofType(fromOrganisationActions.createOrganisation),
switchMap((data) => this.organisation.createOrganisation(data).pipe (
map((response) => 
fromOrganisationActions.createOrganisationSuccess({ orgId: response.id })),
catchError((error) => {
return of(fromOrganisationActions.createOrganisationError(error));
})
)),
)
);

eslint插件ngrx可以发现这些错误,这里有关于规则的更多细节。

最新更新