AbortController - 用于中止一个或多个 DOM 请求
这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。
AbortController
接口代表一个控制器对象,允许您根据需要中止一个或多个 fetch 请求。
您可以使用 AbortController.AbortController()
构造函数创建一个新的 AbortController
对象。使用 AbortSignal
对象可以完成与 DOM 请求的通信。
构造函数
AbortController()
创建一个新的 AbortController
对象实例。
属性
AbortController.signal
只读
返回一个 AbortSignal
对象实例,该实例可用于与 DOM 请求通信 / 中止该请求。
方法
AbortController.abort()
在 DOM 请求完成之前中止它。这样可以中止 fetch 请求。
实例
在以下代码段中,我们使用 Fetch API 下载视频。
我们首先使用 AbortController()
构造函数创建一个控制器,然后使用 AbortController.signal
属性获取对其关联的 AbortSignal
对象。
当启动 fetch 请求时,我们将 AbortSignal
作为选项传递到请求的选项对象中(请参见下面的 {signal}
)。这将信号和控制器与获取请求相关联,并允许我们通过调用 AbortController.abort()
来中止信号,如下面在第二个事件侦听器中所示。
var controller = new AbortController();
var signal = controller.signal;
var downloadBtn = document.querySelector('.download');
var abortBtn = document.querySelector('.abort');
downloadBtn.addEventListener('click', fetchVideo);
abortBtn.addEventListener('click', function() {
controller.abort();
console.log('下载中止');
});
function fetchVideo() {
...
fetch(url, {signal}).then(function(response) {
...
}).catch(function(e) {
reports.textContent = '下载错误:' + e.message;
})
}
注意:当调用
abort()
时,fetch()
promise 将拒绝,参数是一个名为AbortError
的DOMException
。
您可以在 GitHub 上找到完整的工作实例 — 请参阅 abort-api(也可以在线运行)。
规范
规范 | 状态 | 备注 |
---|---|---|
DOM AbortController 的定义 |
现行的标准 | 初始定义 |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 66 | 16 | 57 | 不支持 | 53 | 12.1 11.11 |
AbortController() 构造函数 | 66 | 16 | 57 | 不支持 | 53 | 12.1 11.11 |
abort | 66 | 16 | 57 | 不支持 | 53 | 12.1 11.11 |
signal | 66 | 16 | 57 | 不支持 | 53 | 12.1 11.11 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 66 | 66 | 未知 | 57 | 未知 | 47 | 12.2 11.31 |
AbortController() 构造函数 | 66 | 66 | 未知 | 57 | 未知 | 47 | 12.2 11.31 |
abort | 66 | 66 | 未知 | 57 | 未知 | 47 | 12.2 11.31 |
signal | 66 | 66 | 未知 | 57 | 未知 | 47 | 12.2 11.31 |
1. 即使定义了 window.AbortController
,它也不会真正中止获取请求。参见 bug 174980。
相关链接
- Fetch API
- 可中止的 Fetch 作者:Jake Archibald