Permalink
Browse files

Removes isPending and introduces state as a means to retrieve the Def…

…erred/Promise state. Unit tests amended.
  • Loading branch information...
1 parent 511c9fe commit d29182e8d00b08def0f37fe7e77d9836e39b83a8 @jaubourg jaubourg committed Oct 12, 2011
Showing with 18 additions and 10 deletions.
  1. +12 −6 src/deferred.js
  2. +6 −4 test/unit/deferred.js
View
@@ -9,6 +9,7 @@ jQuery.extend({
var doneList = jQuery.Callbacks( "once memory" ),
failList = jQuery.Callbacks( "once memory" ),
progressList = jQuery.Callbacks( "memory" ),
+ state = "pending",
lists = {
resolve: doneList,
reject: failList,
@@ -19,11 +20,13 @@ jQuery.extend({
fail: failList.add,
progress: progressList.add,
+ state: function() {
+ return state;
+ },
+
+ // Deprecated
isResolved: doneList.fired,
isRejected: failList.fired,
- isPending: function() {
- return !progressList.locked();
- },
then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
@@ -78,9 +81,12 @@ jQuery.extend({
deferred[ key + "With" ] = lists[ key ].fireWith;
}
- // Handle lists exclusiveness
- deferred.done( failList.disable, progressList.lock )
- .fail( doneList.disable, progressList.lock );
+ // Handle state
+ deferred.done( function() {
+ state = "resolved";
+ }, failList.disable, progressList.lock ).fail( function() {
+ state = "rejected";
+ }, doneList.disable, progressList.lock );
// Call given func if any
if ( func ) {
View
@@ -8,11 +8,12 @@ jQuery.each( [ "", " - new operator" ], function( _, withNew ) {
test("jQuery.Deferred" + withNew, function() {
- expect( 20 );
+ expect( 22 );
createDeferred().resolve().then( function() {
ok( true , "Success on resolve" );
ok( this.isResolved(), "Deferred is resolved" );
+ strictEqual( this.state(), "resolved", "Deferred is resolved (state)" );
}, function() {
ok( false , "Error on resolve" );
}).always( function() {
@@ -24,6 +25,7 @@ jQuery.each( [ "", " - new operator" ], function( _, withNew ) {
}, function() {
ok( true , "Error on reject" );
ok( this.isRejected(), "Deferred is rejected" );
+ strictEqual( this.state(), "rejected", "Deferred is rejected (state)" );
}).always( function() {
ok( true , "Always callback on reject" );
});
@@ -37,17 +39,17 @@ jQuery.each( [ "", " - new operator" ], function( _, withNew ) {
jQuery.each( "resolve reject".split( " " ), function( _, change ) {
createDeferred( function( defer ) {
- ok( defer.isPending(), "pending after creation" );
+ strictEqual( defer.state(), "pending", "pending after creation" );
var checked = 0;
defer.progress(function( value ) {
strictEqual( value, checked, "Progress: right value (" + value + ") received" );
});
for( checked = 0; checked < 3 ; checked++ ) {
defer.notify( checked );
}
- ok( defer.isPending(), "pending after notification" );
+ strictEqual( defer.state(), "pending", "pending after notification" );
defer[ change ]();
- ok( !defer.isPending(), "not pending after " + change );
+ notStrictEqual( defer.state(), "pending", "not pending after " + change );
defer.notify();
});
});

0 comments on commit d29182e

Please sign in to comment.