Как я могу обработать ошибку axios в redux-saga

#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