Fixes #9104. Returning null or undefined in a pipe callback shouldn't end up throwing an exception. Silly, silly, me.

This commit is contained in:
jaubourg 2011-05-09 10:01:20 +02:00
parent efd0fce7a1
commit 8c13cfa805
2 changed files with 11 additions and 3 deletions

View file

@ -119,7 +119,7 @@ jQuery.extend({
if ( jQuery.isFunction( fn ) ) {
deferred[ handler ](function() {
returned = fn.apply( this, arguments );
if ( jQuery.isFunction( returned.promise ) ) {
if ( returned && jQuery.isFunction( returned.promise ) ) {
returned.promise().then( newDefer.resolve, newDefer.reject );
} else {
newDefer[ action ]( returned );

View file

@ -145,7 +145,7 @@ jQuery.each( [ "", " - new operator" ], function( _, withNew ) {
test( "jQuery.Deferred.pipe - filtering (done)", function() {
expect(3);
expect(4);
var defer = jQuery.Deferred(),
piped = defer.pipe(function( a, b ) {
@ -173,11 +173,15 @@ test( "jQuery.Deferred.pipe - filtering (done)", function() {
jQuery.Deferred().reject().pipe(function() {
ok( false, "pipe should not be called on reject" );
});
jQuery.Deferred().resolve().pipe( jQuery.noop ).done(function( value ) {
strictEqual( value, undefined, "pipe done callback can return undefined/null" );
});
});
test( "jQuery.Deferred.pipe - filtering (fail)", function() {
expect(3);
expect(4);
var defer = jQuery.Deferred(),
piped = defer.pipe( null, function( a, b ) {
@ -205,6 +209,10 @@ test( "jQuery.Deferred.pipe - filtering (fail)", function() {
jQuery.Deferred().resolve().pipe( null, function() {
ok( false, "pipe should not be called on resolve" );
} );
jQuery.Deferred().reject().pipe( null, jQuery.noop ).fail(function( value ) {
strictEqual( value, undefined, "pipe fail callback can return undefined/null" );
});
});
test( "jQuery.Deferred.pipe - deferred (done)", function() {