From: Timmy Willison Date: Mon, 6 Jul 2015 14:13:01 +0000 (-0400) Subject: Deferred: add .catch handler X-Git-Tag: 3.0.0-alpha1+compat~10 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=ef77f83db86b806425203d1e5ecbcc119d7b9c32;p=jquery.git Deferred: add .catch handler Fixes gh-2102 --- diff --git a/src/deferred.js b/src/deferred.js index 6ec9eec06..ac6956dfb 100644 --- a/src/deferred.js +++ b/src/deferred.js @@ -33,6 +33,9 @@ jQuery.extend({ deferred.done( arguments ).fail( arguments ); return this; }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, // Keep pipe for back-compat pipe: function( /* fnDone, fnFail, fnProgress */ ) { var fns = arguments; diff --git a/test/unit/deferred.js b/test/unit/deferred.js index 97f9111dd..af91b3616 100644 --- a/test/unit/deferred.js +++ b/test/unit/deferred.js @@ -167,6 +167,42 @@ test( "jQuery.Deferred.then - filtering (fail)", function( assert ) { }); }); +test( "jQuery.Deferred.catch", function( assert ) { + assert.expect( 4 ); + + var value1, value2, value3, + defer = jQuery.Deferred(), + piped = defer.catch(function( a, b ) { + return a * b; + }), + done = jQuery.map( new Array( 3 ), function() { return assert.async(); } ); + + piped.done(function( result ) { + value3 = result; + }); + + defer.fail(function( a, b ) { + value1 = a; + value2 = b; + }); + + defer.reject( 2, 3 ).catch(function() { + assert.strictEqual( value1, 2, "first reject value ok" ); + assert.strictEqual( value2, 3, "second reject value ok" ); + assert.strictEqual( value3, 6, "result of filter ok" ); + done.pop().call(); + }); + + jQuery.Deferred().resolve().catch(function() { + assert.ok( false, "then should not be called on resolve" ); + }).then( done.pop() ); + + jQuery.Deferred().reject().catch( jQuery.noop ).done(function( value ) { + assert.strictEqual( value, undefined, "then fail callback can return undefined/null" ); + done.pop().call(); + }); +}); + test( "[PIPE ONLY] jQuery.Deferred.pipe - filtering (fail)", function( assert ) { assert.expect( 4 );