实现一个promise之完成then方法

  • 时间:2020-04-24 19:32 作者:wade3po 来源: 阅读:631
  • 扫一扫,手机访问
摘要:最简单的promise完成了,接着就要完善then方法://...//解决返回结果function resolvePromise(promise2, x, resolve, reject) {};class Promise {//... //then方法,一个成功函数,一个失败函数 then(onF

最简单的promise完成了,接着就要完善then方法:

//...//解决返回结果function resolvePromise(promise2, x, resolve, reject) {};class Promise {//... //then方法,一个成功函数,一个失败函数 then(onFulfilled, onRejected){  //假如传进来的不是函数(不传也算),要忽略,赋值一个函数  // 错误函数要抛出错误才能进入reject  onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : y => y;  onRejected = typeof onRejected === 'function' ? onRejected : r => {throw r};  //then必须返回一个promise,由于要传递成功失败结果  // 给下一个then,所以把方法都放入这个方法  let promise2 = new Promise((resolve, reject) => {   //假如成功,执行成功函数   if(this.state === FULFILLED){    /*成功或者者失败函数返回一个值x,假如报错直接reject     每个人写的promise不同,但是要兼容符合规范的promise     要对x进行兼容解决,返回普通值、方法、对象,其它人的promise实例等     这边要先使用微任务MutationObserver、process.nextTick     假如不兼容微任务才使用宏任务setTimeout、setImmediate     这边直接用setTimeout    */    setTimeout(() => {     try{      let x = onFulfilled(this.value);      resolvePromise(promise2, x, resolve, reject)     }catch (e) {      reject(e);     };    }, 0);   };      //假如失败,执行失败函数   if(this.state === REJECTED){    setTimeout(() => {     try{      let x = onRejected(this.reason);      resolvePromise(promise2, x, resolve, reject)     }catch (e) {      reject(e);     };    }, 0);   };      //假如有异步,订阅成功、失败函数   if(this.state === PENDING){    this.onResolvedCallbacks.push(() => {     setTimeout(() => {      try{       let x = onFulfilled(this.value);       resolvePromise(promise2, x, resolve, reject)      }catch (e) {       reject(e);      };     }, 0);    });        this.onRejectedCallbacks.push(() => {     setTimeout(() => {      try{       let x = onRejected(this.reason);       resolvePromise(promise2, x, resolve, reject)      }catch (e) {       reject(e);      };     }, 0);    });   };  });  //返回promise  return promise2; }}
image
  • 全部评论(0)
最新发布的资讯信息
【系统环境|】2025含金量排名前十计算机专业证书(2025-10-15 20:51)
【系统环境|】你有白帽众测 我有黑帽雇佣(2025-10-15 20:50)
【系统环境|】印度理工学院成功开发出针对5G网络攻击的最新软件解决方案(2025-10-15 20:49)
【系统环境|】道德黑客与黑客教程(2025-10-15 20:49)
【系统环境|】苹果翻车!macOS 15 竟藏“后门”,黑客能直接偷你所有密码(2025-10-15 20:47)
【系统环境|】解密“被墙”玄学:为什么我的网络方案能做到长期稳定?(2025-10-15 20:46)
【系统环境|】NAS软路由/防火墙/网络安全需要注意哪些?如何保护你的网络设备(2025-10-15 20:45)
【系统环境|】你真的理解防火墙吗?(2025-10-15 20:44)
【系统环境|】苹果手机一键换机教程详解(2025-10-15 20:44)
【系统环境|】二手iPhone到手后怎么快速验机?(2025-10-15 20:43)
手机二维码手机访问领取大礼包
返回顶部