如何解决ngrx 效果 - catchError: 返回不结束流,API 调用不重新运行
$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),catchError((error) => {
this.store.dispatch(fromOrganisationActions.createOrganisationError(error));
return throwError(error);
})
)
);
但网上的其他例子表明第一种方法应该有效,但它不适合我,我不明白为什么我的流永远不会结束。
有人可以建议并告诉我为什么我的直播从一开始就永远不会结束吗?
解决方法
应该将 catchError 添加到内部 observable 中。
$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-plugin-ngrx 捕获,更多关于规则 here 的细节。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。