Допустим, у меня есть несколько действий, которые мой магазин может использовать: Load, LoadFail и LoadSuccess.Все мои действия очень просты, LOAD = "load"
, LOAD_FAIL = "load failed"
и LOAD_SUCCESS = "load success"
У меня есть простой редуктор, который включает их, например, так:
export function reducer(state: State = initialState, action: Actions): State {
switch (action.type) {
case Actions.LOAD: {
console.log("Actions.LOAD");
return state;
}
case Actions.LOAD_FAIL: {
console.log("Actions.LOAD_FAIL");
store.error = action.payload;
return state;
}
case Actions.LOAD_SUCCESS: {
console.log("Actions.LOAD_SUCCESS");
state.data = action.payload;
return state;
}
default: {
return state;
}
}
}
У меня есть класс эффектов, который обрабатывает нагрузкурассылка:
@Injectable()
export class TestersEffects {
constructor(
private service: MyHttpService,
private actions$: Actions
) {}
@Effect() load$ = this.actions$.pipe(
ofType(Actions.LOAD),
switchMap(
action => {
return this.service.load().pipe(
map(data => {
console.log("load$ fired");
return new TestersActions.LoadSuccess(data);
}),
catchError(error => {
console.log("error");
return of (new Actions.LoadFail(error));
})
)
}
)
);
}
Наконец, я использую все это следующим образом:
export class MyClass implements OnInit {
data: any;
constructor(private store: Store<AppState>) {}
ngOnInit() {
this.store.dispatch(new Actions.Load());
this.store.select(store => store.State).subscribe(
data => this.data = data,
error => this.handleError(error)
);
}
handleError(error) {
//Whatever I'll do to handle this error
}
}
Этот код отлично работает, когда сервер, который я запрашиваю, отвечает.Однако мне нужно разобраться с ситуациями, в которых он не отвечает.Я предполагаю, что я просто недостаточно хорошо понимаю поток ngrx / store, чтобы полностью понять, как получить мои ошибки, но я в растерянности.Когда я отлаживаю свой код, catchError
в моем классе эффектов запускается и отправляет действие LoadFail, редуктор ловит действие, устанавливает ошибку и возвращает состояние.Однако, с моей стороны подписки в MyClass
, я никогда ничего не вижу.Я полагаю, что здесь я упускаю что-то критическое, но все мои знания в области Google оставили меня с пустыми руками, и я решил, что буду храбрым переполнением стека и буду просить его мудрости по этому вопросу.
tl; dr: Мой магазинработает нормально, когда сервер отвечает, но когда нет, мои ошибки не отправляются на подписку наблюдаемого состояния магазина.