NgRx не пропускает «успешное» действие при ошибке - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть такой эффект:

  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
    };
  })
);

1 Ответ

0 голосов
/ 24 сентября 2019

Это кажется странным, если у вас есть репродукция, я с удовольствием посмотрю.

Можете ли вы проверить:

  • сервер действительно возвращает 400
  • вы используете перехватчики?Если это так, убедитесь, что они не отображают 400 в 200
...