Сломать топор ios обещание цепочки на улове () - PullRequest
1 голос
/ 30 марта 2020

Я централизовал все свои вызовы API в уникальном файловом API. js, как показано ниже:

API. js

Class APIContextProvider extends Component {

    async apiCallTest() {

        var url = random_url

        const options = {
            url: url,
            method: 'GET',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json;',
            },
        };

        return await axios(options)
            .then(response => {
                if (response.status === 200) {
                    return response.data
                }
            }).catch(error => {
                console.log(error.response.status)
            }
        );;
    }

Тогда Я вызываю мой API из другого компонента:

OutsideClass. js

async componentDidMount() {
    this.context.apiCallTest().then(data => {
        // How can I prevent this then() to run when catch() happens?
    });
}

Порядок, в котором все делается, заключается в следующем: then (). Catch () .then ().

То, что я хочу, - это предотвратить последнее then (). не происходит, если обнаружена ошибка c (например, 401), поскольку я хочу глобальную обработку ошибок.

Посмотрел везде, но не могу найти решение ...

Спасибо!

Ответы [ 2 ]

4 голосов
/ 30 марта 2020

Если вы хотите перехватить исключение глобально, используйте перехватчики ax ios в вашем файле bootstrap сразу после

window.axios = require('axios'); 
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

axios.interceptors.response.use(
function (response) { 
    return response; 
},
function (error) {
    // handle error
    if (error.response.status === 422) 
        return error;        
    if (error.response.status === 401) 
        alert(error.response.status + ': ' + error.response.data.message);               
});
1 голос
/ 30 марта 2020

Вы можете снова выдать ошибку в вашем улове, и это позволит избежать затем и go до следующего улова.

await axios(options)
            .then(response => {
                if (response.status === 200) {
                    return response.data
                }
            }).catch(error => {
                if (error.response.status === 401) { 
                  throw error;
                }
                console.log(error.response.status)
            }
...