File tree Expand file tree Collapse file tree 1 file changed +17
-12
lines changed
Expand file tree Collapse file tree 1 file changed +17
-12
lines changed Original file line number Diff line number Diff line change @@ -6,8 +6,8 @@ function Promise(fn) {
66 if ( ! ( this instanceof Promise ) ) return new Promise ( fn )
77 if ( typeof fn !== 'function' ) throw new TypeError ( 'not a function' )
88 var state = null
9+ , delegating = false
910 , value = null
10- , resolved = false
1111 , deferreds = [ ]
1212
1313 this . then = function ( onFulfilled , onRejected ) {
@@ -40,10 +40,17 @@ function Promise(fn) {
4040 }
4141
4242 function resolve ( newValue ) {
43+ if ( delegating )
44+ return
45+ resolve_ ( newValue )
46+ }
47+
48+ function resolve_ ( newValue ) {
4349 if ( state !== null )
4450 return
4551 if ( isPromise ( newValue ) ) {
46- newValue . then ( resolve , reject )
52+ delegating = true
53+ newValue . then ( resolve_ , reject_ )
4754 return
4855 }
4956 state = true
@@ -52,6 +59,12 @@ function Promise(fn) {
5259 }
5360
5461 function reject ( newValue ) {
62+ if ( delegating )
63+ return
64+ reject_ ( newValue )
65+ }
66+
67+ function reject_ ( newValue ) {
5568 if ( state !== null )
5669 return
5770 state = false
@@ -65,14 +78,6 @@ function Promise(fn) {
6578 deferreds = null
6679 }
6780
68- function ifUnResolved ( fn ) {
69- return function ( value ) {
70- if ( resolved ) return
71- resolved = true
72- return fn ( value )
73- }
74- }
75-
76- try { fn ( ifUnResolved ( resolve ) , ifUnResolved ( reject ) ) }
77- catch ( e ) { ifUnResolved ( reject ) ( e ) }
81+ try { fn ( resolve , reject ) }
82+ catch ( e ) { reject ( e ) }
7883}
You can’t perform that action at this time.
0 commit comments