I've trouble synchronizing finished Deferreds with $.when(). I want to be notified when all deferred are finished wether resolved or failed.
My problem is when().always() that fires at first fail and doesn't wait other deferred to complete. Not sure if it's a bug or not.
I've made an example and here's a JsFiddle: http://jsfiddle.net/m3REv/
the js code from it:
/* our multiple deferred we'd like to sync. */
var def1 = $.Deferred();
var def2 = $.Deferred();
var def3 = $.Deferred();
def1.done( function() { logger.log('1 done');} ).fail( function() {logger.log('1 fail');} );
def2.done( function() { logger.log('2 done');} ).fail( function() {logger.log('2 fail');} );
def3.done( function() { logger.log('3 done');} ).fail( function() {logger.log('3 fail');} );
$.when( def1, def2, def3 ).then( function() {
logger.log('w then');
} ).done( function() {
logger.log('w done');
} ).fail( function() {
logger.log('w fail');
} ).always( function() {
logger.log('w always');
});
def1.reject();
def2.resolve();
def3.resolve();
and the output is:
1 fail
w fail
w always
2 done
3 done