我们知道xhr可以调用abort来终止请求,但是fetch如何终止却鲜有人知,其实非常简单,只是我们不够了解,即使用AbortController,具体如下:
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}`); }); }
即在fetch时传入signal作为信令,当调用controller.abort()时,该信令就会发出终止请求的信号,fetch发出的请求就会被终止,其Promise会抛出一个AbortError。