@@ -243,18 +243,6 @@ function $$QProvider() {
243
243
*/
244
244
function qFactory ( nextTick , exceptionHandler ) {
245
245
var $qMinErr = minErr ( '$q' , TypeError ) ;
246
- function callOnce ( self , resolveFn , rejectFn ) {
247
- var called = false ;
248
- function wrap ( fn ) {
249
- return function ( value ) {
250
- if ( called ) return ;
251
- called = true ;
252
- fn . call ( self , value ) ;
253
- } ;
254
- }
255
-
256
- return [ wrap ( resolveFn ) , wrap ( rejectFn ) ] ;
257
- }
258
246
259
247
/**
260
248
* @ngdoc method
@@ -361,21 +349,27 @@ function qFactory(nextTick, exceptionHandler) {
361
349
} ,
362
350
363
351
$$resolve : function ( val ) {
364
- var then , fns ;
352
+ if ( this . promise . $$state . status > 0 ) return ;
365
353
366
- fns = callOnce ( this , this . $$resolve , this . $$reject ) ;
354
+ var then ;
355
+ if ( ( isObject ( val ) || isFunction ( val ) ) && isFunction ( then = val . then ) ) {
356
+ this . promise . $$state . status = - 1 ;
357
+ this . $$delayResolve ( val , then ) ;
358
+ } else {
359
+ this . promise . $$state . value = val ;
360
+ this . promise . $$state . status = 1 ;
361
+ scheduleProcessQueue ( this . promise . $$state ) ;
362
+ }
363
+ } ,
364
+
365
+ $$delayResolve : function ( promiseLike , then ) {
366
+ var that = this ;
367
+ function resolve ( val ) { that . $$resolve ( val ) ; }
368
+ function reject ( val ) { that . $$reject ( val ) ; }
367
369
try {
368
- if ( ( isObject ( val ) || isFunction ( val ) ) ) then = val && val . then ;
369
- if ( isFunction ( then ) ) {
370
- this . promise . $$state . status = - 1 ;
371
- then . call ( val , fns [ 0 ] , fns [ 1 ] , this . notify ) ;
372
- } else {
373
- this . promise . $$state . value = val ;
374
- this . promise . $$state . status = 1 ;
375
- scheduleProcessQueue ( this . promise . $$state ) ;
376
- }
370
+ then . call ( promiseLike , resolve , reject , this . notify ) ;
377
371
} catch ( e ) {
378
- fns [ 1 ] ( e ) ;
372
+ reject ( e ) ;
379
373
exceptionHandler ( e ) ;
380
374
}
381
375
} ,
@@ -386,6 +380,7 @@ function qFactory(nextTick, exceptionHandler) {
386
380
} ,
387
381
388
382
$$reject : function ( reason ) {
383
+ if ( this . promise . $$state . status > 0 ) return ;
389
384
this . promise . $$state . value = reason ;
390
385
this . promise . $$state . status = 2 ;
391
386
scheduleProcessQueue ( this . promise . $$state ) ;
0 commit comments