使用 fetch
在使用fetch方法完成的请求中,通过.catch捕获错误对象时,不能直接拿到完整的response对象内容。
当fetch请求失败时,.catch捕获到的错误对象通常只包含与错误相关的信息,比如网络错误、请求超时等情况的错误描述,而不包含完整的响应内容。
如果想要获取响应的具体内容,即使在请求失败的情况下,也可以在fetch的链式调用中使用then方法,并在第一个回调函数中检查响应状态。如果状态码表示错误,可以通过response.json()或response.text()等方法来获取响应体内容,以便进一步分析错误原因。
以下是一个示例:
fetch('your-url')
.then(response => {
if (!response.ok) {
return response.json().then(errorData => {
throw new Error(`请求失败,状态码:${response.status}。错误信息:${JSON.stringify(errorData)}`);
});
}
return response.json();
})
.then(data => {
console.log('请求成功,数据:', data);
})
.catch(error => {
console.error('发生错误:', error.message);
});
在这个示例中,当请求失败时,会尝试获取响应的 JSON 内容并抛出包含错误状态码和错误信息的新错误,以便在.catch中更好地处理错误情况。
使用 axios
在使用 Axios 实现的请求中,通过 .catch 捕获错误对象时,通常可以获取到部分响应信息,但不能直接拿到完整的 response 对象内容。
当请求失败时,.catch 捕获到的错误对象通常包含一些错误信息,比如错误状态码、错误消息等。但是要获取完整的响应内容,可以在 .catch 之前的 .then 中进行处理,在 then 的第一个回调函数中判断响应状态,如果不是成功状态,可以通过访问 response.data、response.status 等属性来获取响应的具体内容,然后再抛出错误以便在 .catch 中进行处理。
以下是一个示例代码:
axios.get('your-url')
.then(response => {
if (response.status!== 200) {
throw new Error(`请求失败,状态码:${response.status}。响应内容:${JSON.stringify(response.data)}`);
}
return response.data;
})
.catch(error => {
console.error('发生错误:', error.message, '。部分响应信息:', error.response? error.response.data : '无响应信息');
});
在这个示例中,当请求成功时,正常处理响应数据;当请求失败时,在 .catch 中可以输出错误消息以及部分响应信息(如果有响应的话)。但这种方式也不是完全等同于直接获取完整的 response 对象内容。