我已经配置了我的全局错误处理程序:
[{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
时,我的调度仍无效。