@@ -905,13 +905,13 @@ jQuery.extend({
905
905
}
906
906
var i = promiseMethods . length ;
907
907
while ( i -- ) {
908
- obj [ promiseMethods [ i ] ] = deferred [ promiseMethods [ i ] ] ;
908
+ obj [ promiseMethods [ i ] ] = deferred [ promiseMethods [ i ] ] ;
909
909
}
910
910
return obj ;
911
911
}
912
912
} ) ;
913
913
// Make sure only one callback list will be used
914
- deferred . then ( failDeferred . cancel , deferred . cancel ) ;
914
+ deferred . done ( failDeferred . cancel ) . fail ( deferred . cancel ) ;
915
915
// Unexpose cancel
916
916
delete deferred . cancel ;
917
917
// Call given func if any
@@ -923,24 +923,34 @@ jQuery.extend({
923
923
924
924
// Deferred helper
925
925
when : function ( object ) {
926
- var args = arguments ,
927
- length = args . length ,
928
- deferred = length <= 1 && object && jQuery . isFunction ( object . promise ) ?
926
+ var lastIndex = arguments . length ,
927
+ deferred = lastIndex <= 1 && object && jQuery . isFunction ( object . promise ) ?
929
928
object :
930
929
jQuery . Deferred ( ) ,
931
- promise = deferred . promise ( ) ,
932
- resolveArray ;
933
-
934
- if ( length > 1 ) {
935
- resolveArray = new Array ( length ) ;
936
- jQuery . each ( args , function ( index , element ) {
937
- jQuery . when ( element ) . then ( function ( value ) {
938
- resolveArray [ index ] = arguments . length > 1 ? slice . call ( arguments , 0 ) : value ;
939
- if ( ! -- length ) {
940
- deferred . resolveWith ( promise , resolveArray ) ;
941
- }
942
- } , deferred . reject ) ;
943
- } ) ;
930
+ promise = deferred . promise ( ) ;
931
+
932
+ if ( lastIndex > 1 ) {
933
+ var array = slice . call ( arguments , 0 ) ,
934
+ count = lastIndex ,
935
+ iCallback = function ( index ) {
936
+ return function ( value ) {
937
+ array [ index ] = arguments . length > 1 ? slice . call ( arguments , 0 ) : value ;
938
+ if ( ! ( -- count ) ) {
939
+ deferred . resolveWith ( promise , array ) ;
940
+ }
941
+ } ;
942
+ } ;
943
+ while ( ( lastIndex -- ) ) {
944
+ object = array [ lastIndex ] ;
945
+ if ( object && jQuery . isFunction ( object . promise ) ) {
946
+ object . promise ( ) . then ( iCallback ( lastIndex ) , deferred . reject ) ;
947
+ } else {
948
+ -- count ;
949
+ }
950
+ }
951
+ if ( ! count ) {
952
+ deferred . resolveWith ( promise , array ) ;
953
+ }
944
954
} else if ( deferred !== object ) {
945
955
deferred . resolve ( object ) ;
946
956
}
0 commit comments