JQuery deferred.promise() ('-' * 25)
A Pen by Siôn J. Lewis on CodePen.
JQuery deferred.promise() ('-' * 25)
A Pen by Siôn J. Lewis on CodePen.
function asyncEvent() { | |
var dfd = new 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(function working() { | |
if ( dfd.state() === "pending" ) { | |
dfd.notify( "working... " ); | |
setTimeout( working, 500 ); | |
} | |
}, 1 ); | |
// Return the Promise so caller can't change the Deferred | |
return dfd.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 ); | |
} | |
); |