Использую axios для отправки запросов во vue.js 2 в laravel 5.7. В bootstrap.js (точке, где подключаются основные библиотеки - axios, twitter bootstrap и др) я для axios регистрирую общее поведение при отправке, ответе и ошибке:
axios.interceptors.request.use((config) => {
console.log('Отправлен запрос...');
return config;
}, (error) => {axios_error(error)});
axios.interceptors.response.use((response) => {
console.log('Получен ответ.');
return response.data;
}, (error) => {axios_error(error)});
function axios_error(error) {
console.log('Ошибка запроса axios');
return Promise.reject(error);
}
Далее (как в документации) использую следующую конструкцию, чтобы дождаться ответ на запрос, а уже после выполнять остальные инструкции.
async createPerson(person) {
try {
let response = await axios.post('/people', person);
this.setPersonData(response);
} catch (error) {
console.error(error);
}
},
Видно, что вся конструкция обёрнута в try-catch. Однако неожиданно оказывается, что если запрос завершается ошибкой (код 422, например), то this.setPersonData(response);, будет выполнено.
Почему? И как прервать выполнение при ошибке?
Мой вариант такой:
async createPerson(person) {
let response = await axios.post('/people', person);
if (response) {
this.setPersonData(response);
}
},
У вас синтаксис не правильный
(error) => {axios_error(error)}
По сути ничего не сделает, потому что функция сама ничего не вернет. То что вы вызвали Promise.reject еще ничего не значит
(error) => axios_error(error)
Так уже фунция ошибки вернет axios именно reject, что должно вызвать всплытие ошибки
Просто передайте функцию. Ваша конструкция стрелочной функции не возвращает результат.
axios.interceptors.response.use((response) => {
console.log('Получен ответ.');
return response.data;
}, axios_error);
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости