gpt4 book ai didi

javascript - 如何取消 HTTP fetch() 请求?

转载 作者:IT老高 更新时间:2023-10-28 13:18:09 30 4
gpt4 key购买 nike

有一个用于从 JavaScript 发出请求的新 API:fetch() .是否有任何内置机制可以在进行中取消这些请求?

最佳答案

TL/DR:

自 2017 年 9 月 20 日起,

fetch 现在支持 signal 参数,但不支持 目前所有浏览器似乎都支持这一点

2020 年更新:大多数主要浏览器(Edge、Firefox、Chrome、Safari、Opera 等)support the feature ,已成为 the DOM living standard 的一部分. (截至 2020 年 3 月 5 日)

这是我们很快就会看到的变化,因此您应该能够通过使用 AbortControllers AbortSignal 来取消请求。

加长版

如何:

它的工作方式是这样的:

第 1 步:创建一个 AbortController(目前我只使用了 this)

const controller = new AbortController()

第 2 步:您会得到 AbortController 的信号,如下所示:

const signal = controller.signal

第 3 步:您将 signal 传递给 fetch,如下所示:

fetch(urlToFetch, {
method: 'get',
signal: signal, // <------ This is our AbortSignal
})

第 4 步:在需要时中止:

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>

来源:

关于javascript - 如何取消 HTTP fetch() 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31061838/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com