欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > Promise暂停(终止)和重启

Promise暂停(终止)和重启

2025/10/3 11:13:32 来源:https://blog.csdn.net/qq_45327886/article/details/143412039  浏览:    关键词:Promise暂停(终止)和重启

目录

一、问题

二、解决方法

三、总结


tiips:如嫌繁琐,直接移步总结即可

一、问题

 Promise没有提供直接修改状态的API, 怎么实现Promise的暂停和重启?

二、解决方法

1.思路: 

        使用 一个变量 isPaused来区分 暂停和重启两种状态

        暂停(终止):.then方法里面 返回  new Promise((resolve)=>{}) ,不执行resolve方法,就会让Promise一直处于pending状态

        重启: .then方法里面保存返回的result; 重启时 使用 result进行逻辑处理 

         注:重启优化:为了让Promise能够再次调用.then .catch 方法,需要在暂停的时候保存 resolve方法重启时调用 resolve方法,让Promise回到 fulFilled状态

2.代码如下:

class Queue {queue = [new Promise((resolve) => { resolve('task1') }),new Promise((resolve) => { resolve('task2') }),new Promise((resolve) => { resolve('task3') })]isPaused = false;result=[]resolveFn=nullrejectFn=nullcurrentPromise=null;start() {this.currentPromise=Promise.all(this.queue).then((result) => {//暂停前保存数据this.result=result;this.do()return this;})}do() {if (this.isPaused) {new Promise((resolve,reject) => {//保留promise resolve或reject的方法this.resolveFn=resolvethis.rejectFn=reject;//返回一个一直pending的状态})} else {this.resolveFn()//处理数据setTimeout(() => {console.log('result', this.result,this.resolveFn,this.resolveFn())}, 4000)}}pause() {this.isPaused = true;return this;}resume() {this.isPaused = false;this.do()return this;}
}

三、总结

1.基本思路:

  暂停(终止):.then方法里面 返回  new Promise((resolve)=>{}) ,不执行resolve方法,就会让Promise一直处于pending状态

   重启: .then方法里面保存返回的result; 重启时 使用 result进行逻辑处理 

2.重启优化:为了让Promise能够再次调用.then .catch 方法,需要在暂停的时候保存 resolve方法;重启时调用 resolve方法,让Promise回到 fulFilled状态

3.借助额外变量存储也是一种好方法呀,不要钻死胡同!!!

    我很久都想不明白到底要怎么重启,后来发现重启不就是为了能够使用返回值执行 自己的逻辑吗?把返回值存起来不就可以了

/*

希望对你有帮助!

如有错误,欢迎指正,非常感谢!

*/

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词