React Rxjs: catchError не возвращает данные из бэкэнда - PullRequest
0 голосов
/ 17 сентября 2018

Я использую Rxjs с React (TS), и в моих эпосах у меня есть switchMap, где я вызываю API. Затем map и catchErrors, и я хочу передать ответ об ошибке моему редуктору, но он не работает.

Я нашел этот пример: https://redux -observable.js.org / docs / recipes / ErrorHandling.html

поэтому я использовал его:

switchMap((action) => from(Currencies.getAll(action.payload)).pipe(
    map((currencies: any) => {
        return ({type: FETCH_CURRENCIES_SUCCESS, payload: {
            name: action.payload,
            currencies: currencies,
        }});
    }),
    catchError(error => of({
        type: SEND_CURRENCIES_ERROR,
        payload: error.xhr.response,
        error: true,
    }))
))

и мой бэкэнд возвращает код 422 с ошибками. Он достигает catchErrors и передает полезную нагрузку редуктору, но затем, если я запускаю console.log, я вижу стандартное сообщение об ошибке:

Error: Request failed with status code 422
    at createError (createError.js:16)
    at settle (settle.js:18)
    at XMLHttpRequest.handleLoad (xhr.js:77)

На вкладке сети я вижу, что красный запрос и вкладка «Предварительный просмотр» - это ошибки, статус, заголовок и т. Д., Возвращаемые из бэкэнда. Как получить эти данные в моем эпосе?

1 Ответ

0 голосов
/ 17 сентября 2018

Ofc это было глупо.Я использую axios в своем проекте, и в ответе на ошибку, очевидно, нет объекта xhr.Просто замените полезную нагрузку в catchError на:

payload: error.response.data,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...