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 似乎是最安全的。