Created
July 9, 2011 12:53
-
-
Save topliceanu/1073564 to your computer and use it in GitHub Desktop.
simple deferred object implementation, library & platform agnostic
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var newDefered = function(){ | |
var state = 0 ; // 0 - unresolved, 1 - resolved, 2 - rejected | |
var resolveCallbacks = [] ; | |
var resolveArgs = [] ; | |
var rejectCallbacks = [] ; | |
var rejectArgs = [] ; | |
var execute = function( callbacks, args ){ | |
while( callbacks.length !== 0 ){ | |
callbacks.shift().call( {}, args ) ; | |
} | |
} ; | |
var done = function( callback ){ | |
resolveCallbacks.push( callback ); | |
if( state === 1 ){ | |
execute( resolveCallbacks , resolveArgs ); | |
} | |
return that ; | |
} ; | |
var fail = function( callback ){ | |
rejectCallbacks.push( callback ); | |
if( state === 2 ){ | |
execute( rejectCallbacks, rejectCallbacks ); | |
} | |
return that ; | |
} ; | |
var resolve = function(){ | |
if( state !== 0 ) { | |
throw Error( 'State already resolved' ); | |
} | |
state = 1 ; | |
resolveArgs = Array.prototype.slice.call( arguments ); | |
execute( resolveCallbacks , resolveArgs ) ; | |
return that ; | |
} ; | |
var reject = function(){ | |
if( state !== 0 ){ | |
throw Error( 'State already resolved' ); | |
} | |
state = 2 ; | |
rejectArgs = Array.prototype.slice.call( arguments ); | |
execute( resolveCallbacks , rejectArgs ) ; | |
return that ; | |
} ; | |
var isRejected = function(){ | |
return state === 2 ; | |
} ; | |
var isResolved = function(){ | |
return state === 1 ; | |
} ; | |
var getPromise = function(){ | |
return promise ; | |
}; | |
// public module api | |
var promise = { | |
isRejected : isRejected , | |
isResolved : isResolved , | |
done : done , | |
fail : fail | |
} | |
var that = { | |
isRejected : isRejected , | |
isResolved : isResolved , | |
resolve : resolve , | |
reject : reject , | |
done : done , | |
fail : fail , | |
promise : getPromise | |
} ; | |
return that ; | |
} ; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment