微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ngrx 效果 - catchError: 返回不结束流,API 调用不重新运行

如何解决ngrx 效果 - 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),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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?