Выход из try-catch

172
19 января 2019, 03:00

Использую 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);
    }
},
Answer 1

У вас синтаксис не правильный

(error) => {axios_error(error)}

По сути ничего не сделает, потому что функция сама ничего не вернет. То что вы вызвали Promise.reject еще ничего не значит

(error) => axios_error(error)

Так уже фунция ошибки вернет axios именно reject, что должно вызвать всплытие ошибки

Answer 2

Просто передайте функцию. Ваша конструкция стрелочной функции не возвращает результат.

axios.interceptors.response.use((response) => {
    console.log('Получен ответ.');
    return response.data;
}, axios_error);
READ ALSO
Запуск N Promise параллельно с потоком в k Promise

Запуск N Promise параллельно с потоком в k Promise

Итак, я пытаюсь написать программу, запускающую N Promise с потоком в k Promise параллельноПроблема в том, что при запуске без yield sleep 1 программа запускает...

172
Как задать срок хранения ключа?

Как задать срок хранения ключа?

Как задать срок хранения ключа? как предотвратить появление модального окна после закрытия а потом октрытия браузера?

152
Как получить ассоциативный массив jquery?

Как получить ассоциативный массив jquery?

Нужна помощь с jsЕсть таблица, по нажатию кнопки все элементы строки попадают в массив

216