手写Promise
1.promise是手写异步代码的另一种方式,主要用于解决回调嵌套问题
2.promise提供两个参数resolve(成功时调用的函数),reject(失败时调用的参数),它们是promise内部实现好的函数
3.promise有三种状态,pending 等待,fulfilled成功,rejected失败
4.resolve时,将promise的状态从pending改为fulfilled
5.reject时,将promise的状态从pending改为rejected
6.promise是一个类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | class Promise { //立刻执行 constructor(executor) { this .state = 'pending' // 初始化state为等待状态 this .value = undefined //记录成功的值 this .reason = undefined // 记录失败的值 // 只有状态为pending的时候才能被改变状态 // 在new Promise的时候,可以同时调用多个函数,但是只会执行第一个 let resolve = (value) => { if ( this .state === 'pending' ) { this .state = 'fulfilled' // 更新状态 } this .value = value ///记录成功信息 // console.log('将状态改为成功,记录成功的信息') } let reject = (reason) => { if ( this .state === 'pending' ) { this .state = 'rejected' // 更新状态 } this .reason = reason //记录失败的信息 // console.log('将状态改为失败,记录失败的信息') } // 如果执行executor报错,直接reject try { executor(resolve, reject) } catch { reject() } } then(onFulfilled, onRejected) { // 成功调用 onFulfilled 失败调用onRejected 根据state来进行区分 if ( this .state === 'fulfilled' ) { onFulfilled( this .value) } if ( this .state === 'rejected' ) { onRejected( this .reason) } } } const p = new Promise((resolve, reject) => { resolve( '成功的传值' ) // reject('失败的传值') }) // 在类中,给原型加一个then方法 p.then(res => { console.log(res) }) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!