Skip to content

Commit 2190f61

Browse files
committed
feat:then方法中用setTimeOut实现异步
1 parent ae9be82 commit 2190f61

File tree

1 file changed

+33
-9
lines changed

1 file changed

+33
-9
lines changed

index.js

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,21 +53,45 @@ MyPromise.prototype.then = function (onFulfilled, onRejected) {
5353
}
5454
let promise2 = new MyPromise((resolve,reject) => {
5555
if(_this.state === FULFILLED){
56-
let x = onFilfulled(_this.value);
57-
resolvePromise(promise2,x,resolve,reject);
56+
setTimeout(() => { // 用setTimeOut实现异步
57+
try{
58+
let x = onFulfilled(_this.value); // x可能是普通值 也可能是一个promise, 还可能是别人的promise
59+
resolvePromise(promise2,x,resolve,reject); // 写一个方法统一处理
60+
}catch(e){
61+
reject(e);
62+
}
63+
},0);
5864
}
5965
if(_this.state === REJECTED) {
60-
let x = onRejected(_this.reason);
61-
resolvePromise(promise2,x,resolve,reject);
66+
setTimeout(() => {
67+
try{
68+
let x = onRejected(_this.reason);
69+
resolvePromise(promise2,x,resolve,reject);
70+
}catch(e){
71+
reject(e);
72+
}
73+
},0);
6274
}
6375
if(_this.state === PENDING) {
64-
_this.onFilFulledCallbacks.push(function() {
65-
let x = onFilfulled(_this.value);
66-
resolvePromise(promise2,x,resolve,reject);
76+
_this.onFulFilledCallbacks.push(function() {
77+
setTimeout(() => {
78+
try{
79+
let x = onFulfilled(_this.value);
80+
resolvePromise(promise2,x,resolve,reject);
81+
}catch(e){
82+
reject(e);
83+
}
84+
},0);
6785
});
6886
_this.onRejectedCallbacks.push(function(){
69-
let x = onRejected(_this.reason);
70-
resolvePromise(promise2,x,resolve,reject);
87+
setTimeout(() => {
88+
try{
89+
let x = onRejected(_this.reason);
90+
resolvePromise(promise2,x,resolve,reject);
91+
}catch(e){
92+
reject(e);
93+
}
94+
},0);
7195
});
7296
}
7397
});

0 commit comments

Comments
 (0)