lib/runner.js
function forAsync(items, iter, callback) {
	var keys = Object.keys(items);
	var step = function (err, callback) {
		nextTick(function () {
			if (err) {
				return callback(err);
			}
			if (keys.length === 0) {
				return callback();
			}
			var key = keys.pop();
			iter(items[key], key, function (err) {
				step(err, callback);
			});
		});
	};
	step(null, callback);
}
function forAsync(items, iter, callback) {
	var keys = Object.keys(items);
	var step = function (err, callback) {
		nextTick(function () {
			if (err) {
				return callback(err);
			}
			if (keys.length === 0) {
				return callback();
			}
			var key = keys.pop();
			iter(items[key], key, function (err) {
				step(err, callback);
			});
		});
	};
	step(null, callback);
}
function forAsync ( items , iter , callback ) { var keys = Object . keys ( items ) ; var step = function ( err , callback ) { nextTick ( function ( ) { if ( err ) { return callback ( err ) ; } if ( keys . length === 0 ) { return callback ( ) ; } var key = keys . pop ( ) ; iter ( items [ key ] , key , function ( err ) { step ( err , callback ) ; } ) ; } ) ; } ; step ( null , callback ) ; }
for-each async style
for - each async style