function eachAsync(collection, iterator, callback) { var iterate = function(i) { setTimeout(function() { iterator(collection[i]); if (i < collection.length) { iterate(i + 1); } else { callback(); } }, 0); }; iterate(0); }