代码之家  ›  专栏  ›  技术社区  ›  keldar

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

  •  0
  • keldar  · 技术社区  · 5 年前

    我对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);
        })
      )
    );
    

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

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

    0 回复  |  直到 5 年前
        1
  •  1
  •   timdeschryver    5 年前

    捕捉误差应添加到内部可观测值中。

    $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 .