手写简易版Promise

452 阅读1分钟

手写简易版Promise

function Promise(func) {
    if (new.target !== Promise) {
        throw new Error("You must use new with Promise.")
    }
    let self = this;
    self.status = 'pending';
    self.value = null;
    self.error = null;
    self.onResolved = null;
    self.onRejected = null;
    const onResolved = function(value) {
    	if(self.status !== 'pending') {
    	    return;
    	}
    	setTimeout(() => {
    	    self.status = 'resolved';
    	    self.value = value;
    	    self.onResolved(self.value)
    	})
    }
    const onRejected = function(error) {
    	if(self.status !== 'pending') {
    	    return;
    	}
    	setTimeout(() => {
    	    self.status = 'rejected';
    	    self.error = error;
    	    self.onRejected(self.error)
    	})
    }
    func(onResolved, onRejected)
}
Promise.prototype.then = function(onResolved, onRejected) {
    if(this.status === 'pending') {
        this.onResolved = onResolved;
        this.onRejected = onRejected;
    } else if (this.status === 'resolved') {
        onFulfilled(this.value)
    } else {
        onRejected(this.error)
    }
    return this;
}
const promise = new Promise((resolve, reject) => {
    console.log('start')
    setTimeout(() => {
        reject('error, aaaaa');
    },5000)
})
promise.then((res) => {
    console.log('result end')
    console.log(res)
}, (error) => {
    console.log('error end')
    console.log(error)
})