function fetchData() {
return fetch('your-api-url')
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.json();
})
.catch(error => {
if (error.name === 'SyntaxError') {
return Promise.reject(new Error('解析响应数据时出错'));
}
return Promise.reject(new Error('网络请求过程中发生错误: ' + error.message));
});
}
// 使用示例
fetchData()
.then(data => {
console.log(data);
})
.catch(error => {
console.error(error.message);
});
错误处理流程解释:
- 网络请求阶段:
fetch
返回的Promise
在网络请求失败(如网络连接问题)时会被拒绝,catch
块捕获到这个错误,并重新抛出一个带有更有意义信息的错误,表明是网络请求过程中的错误。
- HTTP状态码检查:当请求成功到达服务器并返回响应时,通过
response.ok
检查HTTP状态码。如果状态码不是200(即response.ok
为false
),手动抛出一个错误,包含具体的HTTP状态码信息。
- 数据解析阶段:
response.json()
用于将响应数据解析为JSON格式。如果解析过程中出错(例如返回的数据格式不正确),会抛出一个SyntaxError
。catch
块捕获到这个错误后,重新抛出一个表明解析响应数据出错的错误。
- 调用者接收:调用
fetchData
函数的代码通过.catch
捕获可能发生的各种错误,并可以根据error.message
获取有意义的错误信息进行处理。