如何取消HTTP fetch()请求?
有一个新的API用于从JavaScript发出请求:fetch()。是否有任何内置的机制可以在飞行中取消这些请求?
回答:
TL / DR:
fetch
现在支持signal
截至2017年9月20日的参数,但目前 并非所有浏览器都支持此参数 。
大多数主流浏览器(Edge,Firefox,Chrome,Safari,Opera和其他一些浏览器)都支持该功能,该功能已成为DOM生活标准的一部分。(截至2020年3月5日)
这是我们很快就会看到的更改,因此您应该可以使用AbortController
s 取消请求AbortSignal
。
长版
如何:
它的工作方式是这样的:
:您创建了一个AbortController
(现在我只使用了这个)
const controller = new AbortController()
:您会收到AbortController
s信号,如下所示:
const signal = controller.signal
:您将传递为signal
,例如:
fetch(urlToFetch, { method: 'get',
signal: signal, // <------ This is our AbortSignal
})
:只要需要,就中止:
controller.abort();
这是一个工作原理示例(可在Firefox 57+上运行):
<script> // Create an instance.
const controller = new AbortController()
const signal = controller.signal
/*
// Register a listenr.
signal.addEventListener("abort", () => {
console.log("aborted!")
})
*/
function beginFetching() {
console.log('Now fetching');
var urlToFetch = "https://httpbin.org/delay/3";
fetch(urlToFetch, {
method: 'get',
signal: signal,
})
.then(function(response) {
console.log(`Fetch complete. (Not aborted)`);
}).catch(function(err) {
console.error(` Err: ${err}`);
});
}
function abortFetching() {
console.log('Now aborting');
// Abort.
controller.abort()
}
</script>
<h1>Example of fetch abort</h1>
<hr>
<button onclick="beginFetching();">
Begin
</button>
<button onclick="abortFetching();">
Abort
</button>
资料来源:
- AbortController的最终版本已添加到DOM规范中
- 现在,将获取规范的相应PR合并。
- 跟踪AbortController的实现的浏览器错误可在此处找到:Firefox:#1378342; Chromium:#750599; WebKit:#174980; Edge:#13009916。
以上是 如何取消HTTP fetch()请求? 的全部内容, 来源链接: utcz.com/qa/416975.html