Ngrx:CatchError 不派发动作

Ngrx: CatchError does not dispatch an action

如何使用最新的 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 运算符会自动将 return 值提升为可观察值,这就是为什么您在请求的成功部分不需要 of 运算符的原因。 为了使 CatchError 起作用,它的 return 值必须包装到一个可观察对象中,以便 ngrx 能够解析它。