#reactjs #axios #redux-saga
#reactjs #axios #redux-saga
Вопрос:
Есть ли способ получить ответ об ошибке от axios в попытке / перехватить redux-saga?
У меня есть следующая функция регистрации axios:
export const login = (username, password) => {
const config = {
headers: {
'Content-Type': 'application/json',
},
};
const body = JSON.stringify({ username, password });
return axios
.post('http://127.0.0.1:8000/accounts-api/login', body, config)
.then(response => response.data)
.catch(error => error.response.data)
};
который возвращает
{user: {…}, token: "b5d36ec9086f7f2403a02c2e8d70695e85a48cad2d81e39c9b31fddaa759a79e"}
когда пароль и имя пользователя указаны правильно или
{non_field_errors: ["Incorrect Credentials"]}
когда пароль или имя пользователя неверны.
Функция входа в систему вызывается в следующем генераторе redux-saga:
export function* signIn({ payload: { username, password } }) {
try {
const response = yield login(username, password)
let { user, token } = yield response
yield console.log(user)
yield console.log(token)
} catch(e) {
yield console.log(e)
}
}
Есть ли способ получить ответ об ошибке от axios (в данном случае {non_field_errors: [«Неправильные учетные данные»]} ) в redux-saga catch?
Теперь при неправильных учетных данных пользователя для пользователя и токена установлено значение undefined, и функция не переходит к перехвату redux-saga.
Комментарии:
1. Обещание, которое вы возвращаете из функции входа в систему, никогда не будет отклонено (т.Е. Вызвать ошибку), потому что все ошибки будут перехвачены уловом в этой цепочке обещаний.
2. удалите
.catch(error => error.response.data)
3. кстати, все ‘yield’ после
yield login
бесполезны4. без .catch(ошибка => error.response.data) я получаю « Ошибка: ошибка запроса с кодом состояния 400 при createError (createError.js:16) при settle (settle.js: 17) при XMLHttpRequest.handleLoad (xhr.js:69) « и я теряю доступ к {non_field_errors: [«Неправильные учетные данные»]}
5. конечно, это будет в
e.response.data