Defer
Apply Partial Deferred Promise
by ethan_selzer
HTML
<h3>Description</h3>
<p>Defer function invocation to an existing promise and return a new promise.</p>
<p>Could be used to convert an existing synchronous function to asyncronous behaviour.</p>
JavaScript
function defer( promise, func, context ){
return function(){
var args = [].slice.apply( arguments ),
dfd = new $.Deferred();
promise.done( function(){
var allArgs = args.concat( arguments );
dfd.resolve( func.apply( context, allArgs ) );
} );
promise.fail( function(){
dfd.reject();
} );
return dfd.promise();
};
}
function add( a, b ){
return ( a + b );
}
var obj = {
baseVal : 4,
subtractFromBase : function( b ){
return this.baseVal - b;
}
}
var dfd = new $.Deferred();
var promise = dfd.promise();
window.setTimeout( function(){
dfd.resolve();
}, 3000 );
add = defer( promise, add );
obj.subtractFromBase = defer( promise, obj.subtractFromBase, obj );
add( 3, 6 ).done( function( result ){
console.log( result );
} );
obj.subtractFromBase( 2 ).done( function( result ){
console.log( result );
} );