gpt4 book ai didi

javascript - axios 处理错误

转载 作者:可可西里 更新时间:2023-11-01 02:20:13 25 4
gpt4 key购买 nike

我正在尝试通过 Axios 更好地理解 javascript promises。我假装是处理 Request.js 中的所有错误,并且只从任何地方调用请求函数,而不必使用 catch()

在此示例中,对请求的响应将是 400,并带有 JSON 格式的错误消息。

这是我遇到的错误:

未捕获( promise )错误:请求失败,状态代码为 400

我找到的唯一解决方案是在 Somewhere.js 中添加 .catch(() => {}),但我试图避免这样做。可能吗?

代码如下:

Request.js

export function request(method, uri, body, headers) {
let config = {
method: method.toLowerCase(),
url: uri,
baseURL: API_URL,
headers: { 'Authorization': 'Bearer ' + getToken() },
validateStatus: function (status) {
return status >= 200 && status < 400
}
}

...

return axios(config).then(
function (response) {
return response.data
}
).catch(
function (error) {
console.log('Show error notification!')
return Promise.reject(error)
}
)
}

Somewhere.js

export default class Somewhere extends React.Component {

...

callSomeRequest() {
request('DELETE', '/some/request').then(
() => {
console.log('Request successful!')
}
)
}

...

}

最佳答案

实际上,到目前为止,使用 axios 是不可能的。只有在2xx范围内的状态码,可以在.then()中捕获。

传统的方法是在 catch() block 中捕获错误,如下所示:

axios.get('/api/xyz/abcd')
.catch(function (error) {
if (error.response) {
// Request made and server responded
console.log(error.response.data);
console.log(error.response.status);
console.log(error.response.headers);
} else if (error.request) {
// The request was made but no response was received
console.log(error.request);
} else {
// Something happened in setting up the request that triggered an Error
console.log('Error', error.message);
}

});

另一种方法是在请求或响应被 then 或 catch 处理之前拦截它们。

axios.interceptors.request.use(function (config) {
// Do something before request is sent
return config;
}, function (error) {
// Do something with request error
return Promise.reject(error);
});

// Add a response interceptor
axios.interceptors.response.use(function (response) {
// Do something with response data
return response;
}, function (error) {
// Do something with response error
return Promise.reject(error);
});

关于javascript - axios 处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49967779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com