全局错误处理问题

时间:2017-05-23 01:39:16

标签: angular error-handling ngrx ngrx-store

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

[{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()以外的任何其他地方,那么一切都很好。

另外,我只是对我Store中的整个GlobalErrorHandler明亮而不是使用我的AppService只是为了看看它是否有任何区别,但结果只是通过{获得相同的结果{1}}直接形成dispatching的行动 - handleError()仍未被调用。

任何想法为什么?

更新

我的服务实际上是通过效果调用的,基本上是建议@olsn我也添加了reducer

.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时,我的调度仍无效。

0 个答案:

没有答案