手写简易版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)
})