ngrx - 处理reducer和effect中的错误

时间:2017-04-27 14:03:49

标签: angular ngrx ngrx-effects

在效果模块中使用ngrx。我调度动作,通过效果做一些异步的东西,然后我调度一个新动作来更新状态,然后重定向。这是我正在做的事情的缩减版本:

@Injectable()
export class Effects {

  @Effect()
  start$: Observable<Action> = this.actions$
    .ofType('start')
    // omitted for brevity
    .concatMap(action => [
      new finishAction(action.payload),
      go(['/'])
    ])
    .catch((err) => {
      console.log('err', err);
      return Observable.empty();
    })

  constructor(private actions$: Actions) {
  }
}

这一切都运行正常 - 当我发送start动作时,此效果启动,调度finish动作,然后重定向回根(通过go动作,从@ngrx/router-store导入。

如何处理finishAction失败的事情?目前我在控制台中收到错误,然后go无论如何都会运行。

理想情况下,我想拦截这个失败,然后发出另一个动作(所以我可以显示一个模态或其他内容,但不能重定向)

1 个答案:

答案 0 :(得分:0)

如果finishAction的reducer使进程失败,则状态应该更改为错误1。

您可以在组件中订阅Effects.start $并选择错误状态。如果订阅收到错误,您可以通过转移到新路径做出反应。