AbortController 和 fetch:如何区分网络错误和中止错误
AbortController and fetch: how to distinguish network error from abort error
所以我有一个像这样的中止控制器的获取:
async function fn() {
const abortController = new AbortController();
try {
const response = await fetch(/* ... */, { signal: abortController.signal });
// ...
} catch (e) {
// how can I tell if `e` is from a network error (e.g. offline)
// or an error from an abort
}
}
如何判断 e
是网络错误还是中止错误?
abortController.signal.aborted
会告诉你 AbortSignal
是否开火。
见https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/aborted
或者如果错误 name
属性是 'AbortError'
e.name === 'AbortError'
你可以单独从错误中检测出来,但要注意:
Current version of Firefox rejects the promise with a DOMException
因此,检查 abortController.signal.aborted
似乎是最安全的。
所以我有一个像这样的中止控制器的获取:
async function fn() {
const abortController = new AbortController();
try {
const response = await fetch(/* ... */, { signal: abortController.signal });
// ...
} catch (e) {
// how can I tell if `e` is from a network error (e.g. offline)
// or an error from an abort
}
}
如何判断 e
是网络错误还是中止错误?
abortController.signal.aborted
会告诉你 AbortSignal
是否开火。
见https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/aborted
或者如果错误 name
属性是 'AbortError'
e.name === 'AbortError'
你可以单独从错误中检测出来,但要注意:
Current version of Firefox rejects the promise with a DOMException
因此,检查 abortController.signal.aborted
似乎是最安全的。