From 2a9f0681dee3a6421bafd2fbc4451c9fe364b6ca Mon Sep 17 00:00:00 2001 From: jaubourg Date: Wed, 9 Nov 2011 01:02:29 +0100 Subject: [PATCH] Have Deferred.always return the object onto which it is currently attached to enable true chainability. Fixes #10723. Unit tests added. --- src/deferred.js | 3 ++- test/unit/deferred.js | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/deferred.js b/src/deferred.js index 9444f895f..c97084b70 100644 --- a/src/deferred.js +++ b/src/deferred.js @@ -33,7 +33,8 @@ jQuery.extend({ return this; }, always: function() { - return deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); + deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); + return this; }, pipe: function( fnDone, fnFail, fnProgress ) { return jQuery.Deferred(function( newDefer ) { diff --git a/test/unit/deferred.js b/test/unit/deferred.js index eab14da2d..4a50da2c1 100644 --- a/test/unit/deferred.js +++ b/test/unit/deferred.js @@ -56,6 +56,19 @@ jQuery.each( [ "", " - new operator" ], function( _, withNew ) { }); } ); +test( "jQuery.Deferred - chainability", function() { + + var methods = "resolve reject notify resolveWith rejectWith notifyWith done fail progress then always".split( " " ), + defer = jQuery.Deferred(); + + expect( methods.length ); + + jQuery.each( methods, function( _, method ) { + var object = { m: defer[ method ] }; + strictEqual( object.m(), object, method + " is chainable" ); + }); +}); + test( "jQuery.Deferred.pipe - filtering (done)", function() { expect(4); -- 2.39.5