2

我已经配置了我的全局错误处理程序:

[{provide: ErrorHandler, useClass: GlobalErrorHandler}]

所以基本上如果发生错误,我会调用我的服务来调度操作,所以我会显示带有错误消息的材料小吃栏:

export class AppService {

  constructor(store: Store<fromRoot.State>) { }

  public push(message: string, action?: string, config?: MdSnackBarConfig) {
    const alert: AppAlert = { message: message, action: action, config: config };
    this.store.dispatch(new appAlert.DisplayAppAlertAction(alert));
  }
}

问题是,无论我handleError()在商店中发送什么,都没有得到更新。

export class GlobalErrorHandler extends ErrorHandler {
  /** */
  handleError(error: any): void {
     this.appAlertService.push('Error here', 'OK', config); // not firing the reducer
  }
}

我所有的调度员都在外面工作得很好,handleError()但是当我检查调试时,这个调度员reducers没有被调用。

基本上在错误handleError()被调用然后dispatcher被解雇但状态没有被改变的情况下,原因是因为在这种情况下没有调用reducer。但是,如果我从AppService任何组件或外部任何其他地方调用相同的服务 (),那一切都很好handleError()

另外,我只是将整体照亮StoreGlobalErrorHandler而不是使用 myAppService来查看它是否有任何区别,但结果只是通过dispatching直接形式的操作获得了相同的结果handleError()-reducer仍然没有被调用。

任何想法为什么?

更新

我的服务实际上是被调用的,基本上就像@olsn建议的那样,我也添加.catch了:

 @Effect()
    search$: Observable<Action> = this.actions$
        .ofType(stuff.LOAD)
        .mergeMap(() =>
          this.myService.getStuff()
            .map((stuff: Stuff[]) =>
              new stuff.LoadSuccessAction(stuff)
            )
            .catch((): any => {
              throw new HttpError();
          })
        ).catch((): any => {
              throw new HttpError();
          });

但是并没有帮助两个.catch()块在抛出错误时首先被调用。但是,当单击任何buttons/routes以继续时,handleError()我的调度仍然无法正常工作。

4

0 回答 0