要解决这个问题,需要稍微更改代码以正确捕获中止控制器中的原因。我们可以在调用AbortController.abort()方法时直接将原因保存在中止控制器对象中,并在fetch调用catch子句中使用该原因。
以下是实现此解决方案的示例代码:
const controller = new AbortController();
const signal = controller.signal;
try {
const response = await fetch(url, { signal });
// ...
} catch (err) {
if (err.name === 'AbortError') {
console.log('Fetch Aborted:', controller.reason);
// handle the abort reason here
} else {
console.error('Fetch Error', err);
}
}
// To abort the fetch request and save the abort reason
controller.abort('User aborted fetch request');