This object provides a subset of the methods of the Deferred object (then, done, fail, always, pipe, progress, state and promise) to prevent users from changing the state of the Deferred.
always(alwaysCallback: TypeOrArray<CallbackBase<TR | TJ, UR | UJ, VR | VJ, SR | SJ>>, ...alwaysCallbacks: TypeOrArray<CallbackBase<TR | TJ, UR | UJ, VR | VJ, SR | SJ>>[]): PromiseBase<TR, TJ, TN, UR, UJ, UN, VR, VJ, VN, SR, SJ, SN>
Add handlers to be called when the Deferred object is either resolved or rejected.
see
``
since
1.6
example
````Since the jQuery.get() method returns a jqXHR object, which is derived from a Deferred object, we can attach a callback for both success and error using the deferred.always() method.
$.get( "test.php" ).always(function() { alert( "$.get completed with success or error callback arguments" ); });
Add handlers to be called when the Deferred object is resolved.
see
``
since
1.5
example
````Since the jQuery.get method returns a jqXHR object, which is derived from a Deferred object, we can attach a success callback using the .done() method.
Add handlers to be called when the Deferred object is rejected.
see
``
since
1.5
example
````Since the jQuery.get method returns a jqXHR object, which is derived from a Deferred, you can attach a success and failure callback using the deferred.done() and deferred.fail() methods.
Cause: The .pipe() method on a jQuery.Deferred object was deprecated as of jQuery 1.8, when the .then() method was changed to perform the same function.
Solution: In most cases it is sufficient to change all occurrences of .pipe() to .then(). Ensure that you aren't relying on context/state propagation (e.g., using this) or synchronous callback invocation, which were dropped from .then() for Promises/A+ interoperability as of jQuery 3.0.
example
````Filter resolve value:
vardefer = $.Deferred(), filtered = defer.pipe(function( value ) { returnvalue * 2; }); defer.resolve( 5 ); filtered.done(function( value ) { alert( "Value is ( 2*5 = ) 10: " + value ); });
example
````Filter reject value:
vardefer = $.Deferred(), filtered = defer.pipe( null, function( value ) { returnvalue * 3; }); defer.reject( 6 ); filtered.fail(function( value ) { alert( "Value is ( 3*6 = ) 18: " + value ); });
example
````Chain tasks:
varrequest = $.ajax( url, { dataType:"json" } ), chained = request.pipe(function( data ) { return$.ajax( url2, { data: { user:data.userId } } ); }); chained.done(function( data ) { // data retrieved from url2 as provided by the first request });
Cause: The .pipe() method on a jQuery.Deferred object was deprecated as of jQuery 1.8, when the .then() method was changed to perform the same function.
Solution: In most cases it is sufficient to change all occurrences of .pipe() to .then(). Ensure that you aren't relying on context/state propagation (e.g., using this) or synchronous callback invocation, which were dropped from .then() for Promises/A+ interoperability as of jQuery 3.0.
example
````Filter reject value:
vardefer = $.Deferred(), filtered = defer.pipe( null, function( value ) { returnvalue * 3; }); defer.reject( 6 ); filtered.fail(function( value ) { alert( "Value is ( 3*6 = ) 18: " + value ); });
example
````Chain tasks:
varrequest = $.ajax( url, { dataType:"json" } ), chained = request.pipe(function( data ) { return$.ajax( url2, { data: { user:data.userId } } ); }); chained.done(function( data ) { // data retrieved from url2 as provided by the first request });
Type Parameters
ARF = never
AJF = never
ANF = never
BRF = never
BJF = never
BNF = never
CRF = never
CJF = never
CNF = never
RRF = never
RJF = never
RNF = never
ARP = never
AJP = never
ANP = never
BRP = never
BJP = never
BNP = never
CRP = never
CJP = never
CNP = never
RRP = never
RJP = never
RNP = never
Parameters
doneFilter: null
An optional function that is called when the Deferred is resolved.
Cause: The .pipe() method on a jQuery.Deferred object was deprecated as of jQuery 1.8, when the .then() method was changed to perform the same function.
Solution: In most cases it is sufficient to change all occurrences of .pipe() to .then(). Ensure that you aren't relying on context/state propagation (e.g., using this) or synchronous callback invocation, which were dropped from .then() for Promises/A+ interoperability as of jQuery 3.0.
example
````Filter resolve value:
vardefer = $.Deferred(), filtered = defer.pipe(function( value ) { returnvalue * 2; }); defer.resolve( 5 ); filtered.done(function( value ) { alert( "Value is ( 2*5 = ) 10: " + value ); });
example
````Chain tasks:
varrequest = $.ajax( url, { dataType:"json" } ), chained = request.pipe(function( data ) { return$.ajax( url2, { data: { user:data.userId } } ); }); chained.done(function( data ) { // data retrieved from url2 as provided by the first request });
Cause: The .pipe() method on a jQuery.Deferred object was deprecated as of jQuery 1.8, when the .then() method was changed to perform the same function.
Solution: In most cases it is sufficient to change all occurrences of .pipe() to .then(). Ensure that you aren't relying on context/state propagation (e.g., using this) or synchronous callback invocation, which were dropped from .then() for Promises/A+ interoperability as of jQuery 3.0.
example
````Chain tasks:
varrequest = $.ajax( url, { dataType:"json" } ), chained = request.pipe(function( data ) { return$.ajax( url2, { data: { user:data.userId } } ); }); chained.done(function( data ) { // data retrieved from url2 as provided by the first request });
Type Parameters
ARP = never
AJP = never
ANP = never
BRP = never
BJP = never
BNP = never
CRP = never
CJP = never
CNP = never
RRP = never
RJP = never
RNP = never
Parameters
doneFilter: null
An optional function that is called when the Deferred is resolved.
failFilter: null
An optional function that is called when the Deferred is rejected.
Cause: The .pipe() method on a jQuery.Deferred object was deprecated as of jQuery 1.8, when the .then() method was changed to perform the same function.
Solution: In most cases it is sufficient to change all occurrences of .pipe() to .then(). Ensure that you aren't relying on context/state propagation (e.g., using this) or synchronous callback invocation, which were dropped from .then() for Promises/A+ interoperability as of jQuery 3.0.
example
````Filter resolve value:
vardefer = $.Deferred(), filtered = defer.pipe(function( value ) { returnvalue * 2; }); defer.resolve( 5 ); filtered.done(function( value ) { alert( "Value is ( 2*5 = ) 10: " + value ); });
example
````Filter reject value:
vardefer = $.Deferred(), filtered = defer.pipe( null, function( value ) { returnvalue * 3; }); defer.reject( 6 ); filtered.fail(function( value ) { alert( "Value is ( 3*6 = ) 18: " + value ); });
example
````Chain tasks:
varrequest = $.ajax( url, { dataType:"json" } ), chained = request.pipe(function( data ) { return$.ajax( url2, { data: { user:data.userId } } ); }); chained.done(function( data ) { // data retrieved from url2 as provided by the first request });
Cause: The .pipe() method on a jQuery.Deferred object was deprecated as of jQuery 1.8, when the .then() method was changed to perform the same function.
Solution: In most cases it is sufficient to change all occurrences of .pipe() to .then(). Ensure that you aren't relying on context/state propagation (e.g., using this) or synchronous callback invocation, which were dropped from .then() for Promises/A+ interoperability as of jQuery 3.0.
example
````Filter reject value:
vardefer = $.Deferred(), filtered = defer.pipe( null, function( value ) { returnvalue * 3; }); defer.reject( 6 ); filtered.fail(function( value ) { alert( "Value is ( 3*6 = ) 18: " + value ); });
example
````Chain tasks:
varrequest = $.ajax( url, { dataType:"json" } ), chained = request.pipe(function( data ) { return$.ajax( url2, { data: { user:data.userId } } ); }); chained.done(function( data ) { // data retrieved from url2 as provided by the first request });
Type Parameters
ARF = never
AJF = never
ANF = never
BRF = never
BJF = never
BNF = never
CRF = never
CJF = never
CNF = never
RRF = never
RJF = never
RNF = never
Parameters
doneFilter: null
An optional function that is called when the Deferred is resolved.
Cause: The .pipe() method on a jQuery.Deferred object was deprecated as of jQuery 1.8, when the .then() method was changed to perform the same function.
Solution: In most cases it is sufficient to change all occurrences of .pipe() to .then(). Ensure that you aren't relying on context/state propagation (e.g., using this) or synchronous callback invocation, which were dropped from .then() for Promises/A+ interoperability as of jQuery 3.0.
example
````Filter resolve value:
vardefer = $.Deferred(), filtered = defer.pipe(function( value ) { returnvalue * 2; }); defer.resolve( 5 ); filtered.done(function( value ) { alert( "Value is ( 2*5 = ) 10: " + value ); });
example
````Chain tasks:
varrequest = $.ajax( url, { dataType:"json" } ), chained = request.pipe(function( data ) { return$.ajax( url2, { data: { user:data.userId } } ); }); chained.done(function( data ) { // data retrieved from url2 as provided by the first request });
````Create a Deferred and set two timer-based functions to either resolve or reject the Deferred after a random interval. Whichever one fires first "wins" and will call one of the callbacks. The second timeout has no effect since the Deferred is already complete (in a resolved or rejected state) from the first timeout action. Also set a timer-based progress notification function, and call a progress handler that adds "working..." to the document body.
functionasyncEvent() { vardfd = jQuery.Deferred(); // Resolve after a random interval setTimeout(function() { dfd.resolve( "hurray" ); }, Math.floor( 400 + Math.random() * 2000 ) ); // Reject after a random interval setTimeout(function() { dfd.reject( "sorry" ); }, Math.floor( 400 + Math.random() * 2000 ) ); // Show a "working..." message every half-second setTimeout(functionworking() { if ( dfd.state() === "pending" ) { dfd.notify( "working... " ); setTimeout( working, 500 ); } }, 1 ); // Return the Promise so caller can't change the Deferred returndfd.promise(); } // Attach a done, fail, and progress handler for the asyncEvent $.when( asyncEvent() ).then( function( status ) { alert( status + ", things are going well" ); }, function( status ) { alert( status + ", you fail this time" ); }, function( status ) { $( "body" ).append( status ); } );
Type Parameters
TTarget extends object
Parameters
target: TTarget
Object onto which the promise methods have to be attached
````Use the target argument to promote an existing object to a Promise:
// Existing object varobj = { hello:function( name ) { alert( "Hello " + name ); } }, // Create a Deferred defer = $.Deferred(); // Set object as a promise defer.promise( obj ); // Resolve the deferred defer.resolve( "John" ); // Use the object as a Promise obj.done(function( name ) { obj.hello( name ); // Will alert "Hello John" }).hello( "Karl" ); // Will alert "Hello Karl"
This object provides a subset of the methods of the Deferred object (then, done, fail, always, pipe, progress, state and promise) to prevent users from changing the state of the Deferred.
``