Обработка ошибок с Custom Axe ios и redux-saga - PullRequest
0 голосов
/ 31 марта 2020

В моем приложении React есть следующий конвейер

saga. js:

function* handleGetTrack(action: ReturnType<typeof selectTrack>) {
  try {
    const getTrackResponse = yield httpGetTrack(action.payload)
    yield console.log(getTrackResponse)

     getTrackResponse.status === 200
       ? yield put(trackSelected(getTrackResponse.data))
       : yield put(selectTrackError('Track Not Found (Get)'))
  } catch (err) {
    if (err instanceof Error && err.stack) {
      yield put(selectTrackError(err.stack))
    } else {
      yield put(selectTrackError('An unknown error occured.'))
    }
  }
}

Api. js

export function httpGetTrack(trackId) {
  return customAxios.get(`${URL}/tracks/${trackId}`)
}

customAx ios. js:

export const customAxios = axios.create({
  baseURL: process.env.REACT_APP_API_ENDPOINT,
  timeout: 10000,
})
customAxios.interceptors.response.use(
  function(response) {
    return response
  },

  function(error) {
    const errorResponse = error.response
    if (isTokenExpiredError(errorResponse)) {
      return resetTokenAndReattemptRequest(error)
    }
    return error.response
  }
)

Вот так все отлично работает, На самом деле в моей саге. js Я могу заставить console.log(getTrackResponse) напечатать ошибку хорошо,

Однако в в документации по Ax ios написано, что вы используете return Promise.reject(error) вместо return error.response

Почему это так? У меня все хорошо или неправильно?

1 Ответ

0 голосов
/ 31 марта 2020

Вы пробовали использовать эффект call? Например:

import { call } from 'redux-saga/effects';

...

const getTrackResponse = yield call(httpGetTrack, action.payload);

...

Когда вы определяете свой перехватчик, вы также должны следовать топору ios docs

function(error) {
    const errorResponse = error.response
    ...
    return Promise.reject(error.response);
}
...