手写Promise 系列 一

283 阅读1分钟

手写 Promise

之前在渡一教育视频中学习到了如何自己手写Promise,记录在这里
 正规Promise:
    `const p = new Promise((resolve,reject)=>{resolve(1)})`
 模拟手写Promise:
     
    const FULLFILLED='fullfilled' //最佳编码规范 用常量代表常值
    const REJECT='reject'
    const PENDING='pending'
    
    class MyPromise{ 
        #state=PENDING // 静态属性 #为静态属性标识符(es6)
        #result=undefined
        constructor(executor){ //executor 就是 **(resolve,reject)=>{}**
            const resolve=(data)=>{
                this.#changeState(FULLFILLED,data)
            }
            const reject=(err)=>{
                this.#changeState(REJECT,err)
            }
            
            // 这里用 try catch 是因为模拟 Promise中 throw err 也会触发错误,
            (为什么?原因就是 try catch)
            这个是面试常见问题           
            
            try{
                 executor(resolve,reject)
            } catch(err) {
                reject(err)
            }           
        }   
        #changeState(state,result)=>{
            if(this.#state!==PENDING) { // Promise中的状态一经改变,永不更改!!!
                return
            }
            this.#state=state
            this.#result=result
        }
    }
    // 现在我们有了手写的MyPromise 
    const my_promise=new MyPromise((resolve,reject)=>{
        resolve('我成功了')
    })

下一篇 介绍Promise 中的then方法