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 Standard # ref-for-dom-abortcontroller-signal② |
浏览器兼容性
BCD tables only load in the browser