You can use jQuery pending objects :
var deferred = [ new $.Deferred(), new $.Deferred(), new $.Deferred() ]; $(div1, div2, div3).each(function(i, elem) { $(elem).fadeOut(600, function() { deferred[i].resolve(); }); }); $.when(deferred[0], deferred[1], deferred[2]).done(function() { $(div4, div5, div6).each(function(i, elem) { $(elem).animation({ opacity : 1 }, 600); }); });
As @Felix noted in the comments, a cleaner syntax for $.when would look like this:
$.when.apply(null, deferred).done(function() { $(div4, div5, div6).each(function(i, elem) { $(elem).animation({ opacity : 1 }, 600); }); });
source share