终止Promise的执行
创始人
2025-01-08 20:36:23
0

文章目录

  • 终止Promise的执行
    • 1. HTML部分
    • 2. JavaScript部分
      • 1. Promise.race()
      • 2. Promise.withResolvers()
      • 3. AbortController类

终止Promise的执行

1. HTML部分

                  Document                 

2. JavaScript部分

1. Promise.race()

let abort = null; let p1 = new Promise((resolve, reject) => {     setTimeout(() => {         console.log("p1");         resolve('p1');     }, 3 * 1000) })  let p2 = new Promise((resolve, reject) => {     abort = reject;     setTimeout(() => {         console.log('p2');         resolve('p2')     }, 10 * 1000) })  Promise.race([p1, p2]).then(res => {     console.log(res) }).catch((err) => {     console.log(err, 'abort') })  btn.addEventListener('click', () => {     abort('abort') }) 

2. Promise.withResolvers()

// 模拟异步任务 const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));  const controlPromise = (asyncFn) => {     let rejected = false;     let { promise, resolve, reject } = Promise.withResolvers();      return {         abort: () => {             rejected = true;             reject(new Error('Task abort'));         },         start: () => {             if (!rejected) {                 asyncFn().then(resolve, reject);             };             return promise;         }     } }  const task = controlPromise(async () => {     await sleep(10 * 1000);     return 'task done'; }); task.start().then(console.log, console.error);  btn.addEventListener('click', () => {     task.abort(); })  

3. AbortController类

// 模拟异步任务 const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));  const controlPromise = (asyncFn) => {     const abortController = new AbortController();     const signal = abortController.signal;     return {         abort: () => abortController.abort(),         start: () => {             return new Promise((resolve, reject) => {                 const cancel = () => reject(new Error('Task abort'));                 if (signal.aborted) {                     cancel();                     return;                 }                 asyncFn().then(resolve, reject);                 signal.addEventListener('abort', cancel);             })         }     } } const task = controlPromise(async () => {     await sleep(10 * 1000);     return 'task done'; }); task.start().then(console.log, console.error);  btn.addEventListener('click', () => {     task.abort(); }) 

相关内容

热门资讯

透视透视挂!新奇玩乐辅助器下载... 透视透视挂!新奇玩乐辅助器下载,wpk辅助工具下载,普及教程(竟然存在有挂)是一款可以让一直输的玩家...
黑科技智能ai!wepoke软... 黑科技智能ai!wepoke软件透明挂价格(wepOKE)外挂透明挂辅助工具(必知教程黑科技神器)是...
透视脚本!海米大厅辅助,德普之... 透视脚本!海米大厅辅助,德普之星辅助器app,安装教程(真是存在有挂)准备好在德普之星辅助器app ...
黑科技美元局!wepoke是不... 这是一款非常优秀的wepoke是不是有挂 ia辅助检测软件,能够让你了解到wepoke是不是有挂中牌...
透视ai代打!天酷辅助器,wp... 透视ai代打!天酷辅助器,wpk辅助器下载,系统教程(都是是有挂);玩家必备必赢加哟《1367043...
黑科技中牌率!wpk伙牌(wE... 1、黑科技中牌率!wpk伙牌(wEPoke)外挂透视辅助神器(玩家必备科普黑科技攻略)(UU pok...
透视讲解!金虎爷辅助,德普之星... 透视讲解!金虎爷辅助,德普之星app安卓版破解版,揭秘攻略(总是存在有挂)是一款可以让一直输的玩家,...
黑科技系统!wpk辅助实时策略... 黑科技系统!wpk辅助实时策略建议(wepoke)外挂透视辅助挂(信息共享黑科技方法)是由北京得wp...
透视模拟器!蛮王大厅辅助插件,... 透视模拟器!蛮王大厅辅助插件,wepoekr底牌透视,揭秘教程(一贯真的有挂)1、不需要AI权限,帮...
辅助黑科技!wpk智能ai(w... 1、辅助黑科技!wpk智能ai(wePOKE)外挂黑科技辅助神器(发现玩家黑科技方法);详细教程。2...