-
-
Save jaredwilli/867398 to your computer and use it in GitHub Desktop.
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
/*! | |
* jQuery whenthen - v0.2 - 3/12/2011 | |
* http://benalman.com/ | |
* | |
* Copyright (c) 2011 "Cowboy" Ben Alman | |
* Dual licensed under the MIT and GPL licenses. | |
* http://benalman.com/about/license/ | |
*/ | |
(function($){ | |
/* | |
$.whenthen( deferred, [ done_callback, [ fail_callback ] ] ) | |
Pass a Deferred, `done` callback, and `fail` callback all at once. Multiple | |
items of any arg can be specified by passing an array for that arg. | |
Returns a promise. | |
*/ | |
$.whenthen = function( whens, dones, fails ) { | |
var promise; | |
$.each(arguments, function( i, arg ) { | |
var method = i ? promise[i === 1 ? 'done' : 'fail'] : $.when; | |
promise = method[$.type(arg) === 'array' ? 'apply' : 'call'](promise, arg); | |
}); | |
return promise; | |
}; | |
})(jQuery); |
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
// Unit tests | |
var dfds = []; | |
$.each("a b c d".split(" "),function( i, v ) { | |
var dfd = $.Deferred(); | |
setTimeout(function(){ | |
if ( i === 3 ) { | |
dfd.reject( "rejected " + i ); | |
} else { | |
dfd.resolve( "resolved " + i ); | |
} | |
}, 100); | |
dfds.push(dfd); | |
}); | |
var dfdYay = dfds[0], | |
dfdYays = dfds.slice(0, -1), | |
dfdNay = dfds[3], | |
dfdNays = dfds.slice(1), | |
testArr = [], | |
testSuccess = 0; | |
function test( val ) { | |
if ( val ) { | |
testSuccess++; | |
} | |
return function() { | |
testArr.push(val); | |
} | |
} | |
setTimeout(function(){ | |
console.log(testArr.length === testSuccess && testArr.indexOf(false) < 0 ? 'SUCCESS' : 'FAILURE'); | |
}, 200); | |
// The "jQuery" way. | |
$.when(dfds[0], dfds[1], dfds[2]).then(test(true), test(false)); | |
$.when(dfds[0], dfds[1], dfds[2]).done(test(true)).fail(test(false)); | |
$.when(dfds[1], dfds[2], dfds[3]).then(test(false), test(true)); | |
$.when(dfds[1], dfds[2], dfds[3]).done(test(false)).fail(test(true)); | |
// Options! | |
$.whenthen(dfdYay, test(true)); | |
$.whenthen(dfdYay, [test(true), test(true)]); | |
$.whenthen(dfdYays, [test(true), test(true)]); | |
$.whenthen(dfdYay, test(true), test(false)); | |
$.whenthen(dfdYays, test(true), [test(false), test(false)]); | |
$.whenthen(dfdYay, [test(true), test(true)], test(false)); | |
$.whenthen(dfdYays, [test(true), test(true)], [test(false), test(false)]); | |
$.whenthen(dfdNay, test(false)); | |
$.whenthen(dfdNay, [test(false), test(false)]); | |
$.whenthen(dfdNays, [test(false), test(false)]); | |
$.whenthen(dfdNay, test(false), test(true)); | |
$.whenthen(dfdNays, test(false), [test(true), test(true)]); | |
$.whenthen(dfdNay, [test(false), test(false)], test(true)); | |
$.whenthen(dfdNays, [test(false), test(false)], [test(true), test(true)]); |
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
// Sample Usage | |
$.whenthen(deferred, function( a ) { | |
// `a` are the value(s) the deferred was resolved with. | |
}); | |
$.whenthen(array_of_two_deferreds, function( a, b ) { | |
// `a` and `b` are the value(s) the deferreds were resolved with. | |
}); | |
$.whenthen(deferred, function( a ) { | |
// `a` are the value(s) the deferred was resolved with. | |
}, function( a ) { | |
// `a` are the value(s) the deferred was rejected with. | |
}); | |
// etc... |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment