У меня есть такой эффект:
updateBook$ = createEffect(() =>
this._actions$.pipe(
ofType(START_UPDATE_BOOK),
exhaustMap(action => this._api.updateBook({id: action.id}).pipe(
map(data => UPDATE_BOOK({id: data.id})),
catchError(error => of(HANDLE_ERROR({error})))
)
)
));
И этот метод в службе API:
updateBook(id: string): Observable<any> {
const params = {
id
};
return this.httpClient
.get<any>(`${this._host}/${this.module}/api/${this.endpoint}/Delete`, {params});
}
Однако, когда заданный идентификатор неверен и сервер возвращает 400 Bad Request,Действие UPDATE_BOOK все еще вызывается (и HANDLE_ERROR вскоре после этого).Почему это происходит, и действие UPDATE_BOOK не пропускается?Спасибо за предоставленную помощь.
ОБНОВЛЕНИЕ ( Я забыл определить редуктор для одного из действий ): Действия определены следующим образом:
export const START_UPDATE_BOOK = createAction(
'[Books] Start update book',
props<{id: string}>()
);
export const UPDATE_BOOK = createAction(
'[Books] Update book',
props<{id: string}>()
);
export const HANDLE_ERROR = createAction(
'[Books] Handle Error',
props<{error: string}>()
);
Редуктор:
const bookReducer = createReducer(initialState,
on(START_UPDATE_BOOK),
on(UPDATE_BOOK, (state, payload) => {
const book: Book = state.books.find(el => el.Id === payload.id);
book.Status = Status.PENDING;
return {
...state,
};
}),
on(HANDLE_ERROR, (state, payload) => {
return {
...state,
error: payload.error
};
})
);