Permalink
Browse files

Deferred: add .catch handler

Fixes gh-2102
  • Loading branch information...
timmywil committed Jul 6, 2015
1 parent 8e4aac8 commit 84ccf2606c6b97d5875774bf774f9f2aae950ae7
Showing with 39 additions and 0 deletions.
  1. +3 −0 src/deferred.js
  2. +36 −0 test/unit/deferred.js
View
@@ -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;
View
@@ -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 );

0 comments on commit 84ccf26

Please sign in to comment.