В axios
, почему throw new Error()
не разрешен внутри catch()
?Я нахожусь в таком требовании, где, если сервер возвращает ошибку, блок catch должен выдать ошибку, которая позже будет обработана redux-saga, и будет выполнено соответствующее действие.
Вызов API:
export const userSignupApi = userDetails => {
const endpoint = `${URL_ROOT}${URN_SIGNUP}`;
axios
.post(endpoint, userDetails)
.then(response => {
console.log("Response: ", response);
//do something with the response
})
.catch(error => {
throw new Error(error.response.data.message);
});
};
Я получаю Unhandled Rejection (Error)
из-за вышеуказанного блока catch.Ниже моя сага, которая обрабатывает операцию:
import { call, takeLatest, put } from "redux-saga/effects";
function* handleUserSignup(action) {
try {
yield call(userSignupApi, action.userDetails);
yield put(userSignupSuccess()); //dispatching success action
} catch (error) {
yield put(userSignupFail(error)); //dispatching error action
}
}
function* watchUserSignup() {
yield takeLatest(NEW_USER.SIGNUP, handleUserSignup);
}
Редактировать: Почему я хочу вышеупомянутую структуру кода?Потому что это облегчает модульное тестирование кода API и кода саги.