js实现一个可中断promise 或 中断一个请求的方法

首先,要用到一个新的API:# AbortController

AbortController 接口表示一个控制器对象,允许你根据需要中止一个或多个 Web 请求。

你可以使用AboutController()构造函数创建一个新的AboutController示例对象,使用signal对象可以完成与异步操作的通信。

构造函数AboutController()

创建一个AboutController的对象实例const signal = new AboutController()

实例方法

signal.about()

中止一个尚未完成的异步操作。这就能够中止fetch请求 以及 任何响应体 和 流的使用。

 

中止一个promise

const stopR = document.getElementById("stop");
// 先创建AbortController的实例const controller = new AbortController();const signal = controller.signal;
// 创建一个primesconst myPromise = new Promise((resolve, reject) => {  // 模拟一个异步操作,比如setTimeout  const timerId = setTimeout(() => {    // 在执行异步操作前,应该先检查是否取消了promise    if (signal.aborted) {      reject(new Error("Promise cancelled"));    } else {      resolve("Promise resolved");    }  }, 3000);
  // 监听取消信号  signal.addEventListener("abort", () => {    // 如果收到取消信号,就清楚异步操作    clearTimeout(timerId);    // 同时拒绝promise    reject(new Error("Promise cancelled"));  });});
// 执行异步操作myPromise  .then((res) => {    console.log("res", res);  })  .catch((err) => {    console.log("err:", err);  });
stopR.onclick = async function () {  // 取消异步操作时,调用以下方法  controller.abort();};

在上面示例中,当调用controller.abort()时,就会触发’ signal.addEventListener(“abort”‘这步操作,此刻异步函数还没执行完,在abort()事件中就将异步函数,清除掉了,同时在abort()方法中返回了reject(new Error(“Promise cancelled”)),从而使promise停止。

中止一个请求,如fetch

// 先创建AbortController的实例const controller = new AbortController();const signal = controller.signal;
// 创建一个fetch请求const myFetch = fetch("https://www.baidu.com/api/example/data", { signal });
signal.addEventListener("abort", () => {  console.log("fetch aborted---11");});
myFetch  .then((res) => {    // 处理响应    if (!res.ok) {      throw new Error("network response was not ok");    }  })  .then((data) => {    // 处理数据    console.log("data::", data);  })  .catch((err) => {    console.error("捕获报错:", err);  });
// 在取消取消fetch时,调用controller.abort(

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/80458.html

(0)
guozi's avatarguozi
上一篇 2024年5月31日 上午9:46
下一篇 2024年5月31日 上午9:48

相关推荐

  • 流量攻击防护ddos

    网络安全是当今社会的重要议题,随着互联网的普及和应用,网络攻击事件也层出不穷。而其中最具破坏性的攻击方式之一就是DDoS攻击。那么什么是DDoS攻击?它又有哪些危害及影响?如何有效…

    行业资讯 2024年4月17日
    0
  • 南宁网站优化

    南宁网站优化,你是否听说过这个词?它是指通过一系列的技术手段,提升网站在搜索引擎中的排名,从而增加网站的流量和曝光度。随着互联网的发展,越来越多的企业开始重视南宁网站优化,因为它能…

    行业资讯 2024年4月9日
    0
  • 网站屏蔽怎么解除,购物网站被屏蔽怎么解锁呢

    购物网站被屏蔽可能会让人头疼,但不必太担心。通过本文介绍的常见解锁方法和避免被屏蔽的技巧,希望您已经有了一定的了解和应对能力。如果您还有任何疑问或需要帮助,请随时联系编辑晓苏。作为…

    行业资讯 2024年5月11日
    0
  • dns污染怎么处理,dns被污染了怎么清理

    (2) 清除本地缓存:如果您的ISP在本地缓存中存储了错误的域名解析信息,您可以通过清除本地缓存来解决该问题。具体操作说明请参阅各操作系统的手册。 (3) 使用VPN服务:通过使用…

    行业资讯 2024年5月9日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注