在使用AbortController和fetch进行网络请求时,可以通过捕获错误对象来区分网络错误和中止错误。下面是一个示例代码,演示了如何使用AbortController和fetch来发送网络请求,并区分不同的错误类型:
// 创建一个AbortController对象
const controller = new AbortController();
const signal = controller.signal;
// 发送网络请求
fetch('http://example.com/api', { signal })
.then(response => {
// 检查响应状态码
if (!response.ok) {
throw new Error('网络错误');
}
return response.json();
})
.then(data => {
// 处理返回的数据
console.log(data);
})
.catch(error => {
// 检查错误类型
if (error.name === 'AbortError') {
console.log('请求已中止');
} else {
console.log('其他网络错误');
}
});
// 中止网络请求
controller.abort();
在上面的代码中,我们创建了一个AbortController对象,并使用它的signal属性作为fetch请求的信号。然后,我们发送了一个网络请求到'http://example.com/api',并在响应的Promise链中检查了响应的状态码。如果状态码不是200-299范围内的,我们抛出一个错误。
在catch块中,我们可以检查捕获到的错误对象的name属性。如果它是'AbortError',就说明是由于中止请求而导致的错误。否则,就说明是其他网络错误。
最后,我们通过调用controller.abort()方法来中止网络请求。
请注意,这是一个基本示例,你可以根据自己的需求进行相应的修改和扩展。