实现异步状态封装Promise

242 阅读1分钟
  1. promse是异步状态的封装。
  2. 大致有三种状态:state: pedding, resolve, reject.
  3. 参数:fn(resolve, reject); 方法then, catch
const PEDDING = 'pedding'
const RESOLVED = 'resolved'
const REJECTED = 'rejected'

class CustomPromse {
    constructor(fn) {
        this.state = PEDDING
        this.resolveQueue = []
        this.rejectQueue = []
        this.fn = fn
        const resolve = (...res) => {
            if (this.state === PEDDING) {
                this.state = RESOLVED
                this.resolveQueue.forEach(item => item(...res))
            }
        }
        
        const reject = (...res) => {
            if (this.state === PEDDING) {
                this.state = REJECTED
                this.rejectQueue.forEach(item => item(...res))
            }
        }
        
        try {
            fn(resolve, reject)
        } catch (e) {
            reject(e)
        }
        
    }
    
    then(fn) {
        if (this.state === PEDDING) {
            this.resolveQueue.push(fn)
        }
    }
    
    catch(fn) {
        this.rejectQueue.push(fn)
    }
}