为什么动作在第二次运行时不会触发效果?

Ahm*_*mer 5 observable rxjs ngrx ngrx-effects angular

影响:

@Effect()
  loadDocsEffect$ = this.actions$.pipe(
    ofType(myActionTypes.LoadDocs),
    mergeMap(action => this.myService.getDocs()),
    map(data => new LoadDocsSuccess(data)),
    catchError(error => Observable.of(new LoadDocsFailure(error)))
  );
Run Code Online (Sandbox Code Playgroud)

当我返回数据时它可以工作,但是当服务器响应错误时(例如404),可观察对象已完成,并且在我第二次调度动作时不会触发效果。我寻找一种正确处理错误并继续观察到的流的方法,以便可以在我的组件中订阅它并采取相应的措施。

@ngrx Effect中的解决方案第二次不运行对我不起作用,或者我无法使其工作。

Ole*_*luk 10

您需要catchError根据要求而不是actions$。为此,您将需要修改代码,如下所示:

mergeMap(action => 
  this.myService.getDocs().pipe(
    map(data => new LoadDocsSuccess(data)),
    catchError(error => Observable.of(new LoadDocsFailure(error)))
  )
)
Run Code Online (Sandbox Code Playgroud)