X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fcore.js;h=036b2db6b9722650938b7187c24b29175cef1090;hb=5d9db486c774c10293d0813c89dfdbd973120030;hp=87b24c80ad5c5b198d5de095194b5862c48c7d89;hpb=cacea6f7e778d42cda56066a6b1da8fb163410cc;p=jquery.git diff --git a/src/core.js b/src/core.js index 87b24c8..036b2db 100644 --- a/src/core.js +++ b/src/core.js @@ -843,12 +843,6 @@ jQuery.extend({ callbacks.shift().apply( context, args ); } } - // We have to add a catch block for - // IE prior to 8 or else the finally - // block will never get executed - catch (e) { - throw e; - } finally { fired = [ context, args ]; firing = 0; @@ -905,13 +899,13 @@ jQuery.extend({ } var i = promiseMethods.length; while( i-- ) { - obj[ promiseMethods[ i ] ] = deferred[ promiseMethods[ i ] ]; + obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ]; } return obj; } } ); // Make sure only one callback list will be used - deferred.then( failDeferred.cancel, deferred.cancel ); + deferred.done( failDeferred.cancel ).fail( deferred.cancel ); // Unexpose cancel delete deferred.cancel; // Call given func if any @@ -923,24 +917,34 @@ jQuery.extend({ // Deferred helper when: function( object ) { - var args = arguments, - length = args.length, - deferred = length <= 1 && object && jQuery.isFunction( object.promise ) ? + var lastIndex = arguments.length, + deferred = lastIndex <= 1 && object && jQuery.isFunction( object.promise ) ? object : jQuery.Deferred(), - promise = deferred.promise(), - resolveArray; - - if ( length > 1 ) { - resolveArray = new Array( length ); - jQuery.each( args, function( index, element ) { - jQuery.when( element ).then( function( value ) { - resolveArray[ index ] = arguments.length > 1 ? slice.call( arguments, 0 ) : value; - if( ! --length ) { - deferred.resolveWith( promise, resolveArray ); - } - }, deferred.reject ); - } ); + promise = deferred.promise(); + + if ( lastIndex > 1 ) { + var array = slice.call( arguments, 0 ), + count = lastIndex, + iCallback = function( index ) { + return function( value ) { + array[ index ] = arguments.length > 1 ? slice.call( arguments, 0 ) : value; + if ( !( --count ) ) { + deferred.resolveWith( promise, array ); + } + }; + }; + while( ( lastIndex-- ) ) { + object = array[ lastIndex ]; + if ( object && jQuery.isFunction( object.promise ) ) { + object.promise().then( iCallback(lastIndex), deferred.reject ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( promise, array ); + } } else if ( deferred !== object ) { deferred.resolve( object ); }