const PENDING = 'pending';
const RESOLVED = 'resolved';
const REJECTED = 'rejected';
function newPromise(fn){
const _that = this;
_that.state = PENDING;
_that.value = null;
_that.resolvedCallbacks = [];//用来保存then中的回调
_that.rejectedCallbacks = [];//用来保存then中的回调
function resolve(value){
if(value instanceof newPromise){
value.then(resolve,reject);
}
setTimeout(()=>{
if(_that.state == PENDING){
_that.state = RESOLVED;
_that.value = value;
_that.resolvedCallbacks.map(cb => cb(_that.value));
}
},0)
}
function reject(value){
if(value instanceof newPromise){
value.then(resolve,reject);
}
setTimeout(()=>{
if(_that.state == PENDING){
_that.state = REJECTED;
_that.value = value;
_that.rejectedCallbacks.map(cb => cb(_that.value))
}
},0)
}
try{
fn(resolve,reject);
}catch(e){
reject(e);
}
}
newPromise.prototype.then = function(resolvedCallback,rejectedCallback){
const _that = this;
let promise2 = null;
resolvedCallback = typeof resolvedCallback == 'function'? resolvedCallback:v => v;
rejectedCallback = typeof rejectedCallback == 'function'? rejectedCallback: r => {throw(r);};
if(_that.state == PENDING){
_that.resolvedCallbacks.push(resolvedCallback);
_that.rejectedCallbacks.push(rejectedCallback);
}
if(_that.state == RESOLVED){
resolvedCallback(_that.value);
}
if(_that.state == REJECTED){
rejectedCallback(_that.value);
}
}
new newPromise((resolve,reject) => {
setTimeout(()=>{
resolve(1)
},0)
}).then(value => {
console.log(value)
})
07-14
6102
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
03-18
1780
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
12-05
3267
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)