@@ -53,21 +53,45 @@ MyPromise.prototype.then = function (onFulfilled, onRejected) {
53
53
}
54
54
let promise2 = new MyPromise ( ( resolve , reject ) => {
55
55
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 ) ;
58
64
}
59
65
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 ) ;
62
74
}
63
75
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 ) ;
67
85
} ) ;
68
86
_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 ) ;
71
95
} ) ;
72
96
}
73
97
} ) ;
0 commit comments