终止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(); }) 

相关内容

热门资讯

科技通报《wepokE》软件透... 科技通报《wepokE》软件透明挂!(透明挂)软件科技(2020已更新)(哔哩哔哩);超受欢迎的稳赢...
总算明白《WPK德州辅助透视》... 总算明白《WPK德州辅助透视》太坑了原来确实是有挂(有挂细节);1、让任何用户在无需AI插件第三方神...
黑科技教程!(wPK)透视辅助... 黑科技教程!(wPK)透视辅助!(透视)外挂辅助挂程序(2021已更新)(哔哩哔哩);中的10万兆豆...
技术分享!WPK数据(wpK)... 技术分享!WPK数据(wpK)辅助透视!(辅助透视)详细教程(2025已更新)(哔哩哔哩)技术分享!...
MongoDB与HBase:非...         导语:今天我要向大家介绍MongoDB和HBase这两款流行的非关系型...
非关系型数据库-Redis Redis     Redis是一个开源的内存数据库系统,其主要用途是作为高速缓存、消...
MongoDB介绍 什么是MongoDBMongoDB是一种高性能、可拓展性极强的NoSQL数据库管理系统。与传统关系型...
玩家必看秘籍wePokE软件透... 玩家必看秘籍wePokE软件透明挂!太夸张了原来是有挂(证实有挂)(哔哩哔哩)是一款可以让一直输的玩...
nosql数据库期末考试知识点... 目录1、什么是nosql数据库,它包括哪些  文档数据库  建数据  哪一种是最简单的...
NoSQL数据库:定义、特性、... 目录一、引言二、NoSQL的定义与起源三、NoSQL的特性四、NoSQL的分类五、NoSQL的应用场...