AbortController:signal 属性

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2019.

备注: 此特性在 Web Worker 中可用。

AbortController 接口的只读属性 signal 返回一个 AbortSignal 实例对象,该对象可以根据需要与异步操作通信或终止异步操作。

一个 AbortSignal 实例对象。

示例

在下面的这段代码中,我们将通过 Fetch API 来下载一段视频。

首先通过 AbortController() 构造函数来创建一个 controller 实例,然后通过 AbortController.signal 属性获取到它的关联对象 AbortSignal 的引用。

fetch 请求初始化时,我们将 AbortSignal 作为一个选项传递进入请求的选项对象中(下面的 {signal})。这将 signal 和 controller 与 fetch 请求相关联,并且允许我们通过调用 AbortController.abort() 去中止它,如下面的第二个事件监听器。

js
const controller = new AbortController();
const signal = controller.signal;

const url = "video.mp4";
const downloadBtn = document.querySelector(".download");
const abortBtn = document.querySelector(".abort");

downloadBtn.addEventListener("click", fetchVideo);

abortBtn.addEventListener("click", () => {
  controller.abort();
  console.log("Download aborted");
});

function fetchVideo() {
  fetch(url, { signal })
    .then((response) => {
      console.log("Download complete", response);
    })
    .catch((err) => {
      console.error(`Download error: ${err.message}`);
    });
}

备注:abort() 被调用,fetch() promise 将会抛出一个 AbortError.

你可以在 GitHub 上找到完整的可以运行的示例;你还可以看它的在线演示

规范

Specification
DOM
# ref-for-dom-abortcontroller-signal②

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
signal

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
Has more compatibility info.

参见