Ngrx:CatchError 不分派动作

问题描述

如何使用最新的 ngrx 处理 catchError?

effect$ = createEffect(() =>
    this.actions$.pipe(
      ofType(contactAction),switchMap(({ data }) =>
        this.postService.contact(data).pipe(
          map(() => contactSuccess()),catchError(error => contactFail)
        )
      )
    )
  );
  
  
  
  

当发生 HTTP 错误时,Effect 不会调度“contactFail”操作。

解决方法

catchError(error => of( contactFail() ))

应该可以解决问题。 map Operator 会自动将返回值提升为 observable,这就是为什么您在请求的成功部分不需要 of Operator。 为了让 CatchError 起作用,它的返回值必须包装到一个 observable 中,以便 ngrx 能够解决它。