/** * Allow other processes to execute while iterating over * an array. Useful for large arrays, or long-running processing * * @param {Function} fn iterator fed each element of the array. * @param {Function} next executed when done */ Array.prototype.nonBlockingForEach = function(fn, next) { var arr = this; var i = 0; var len = arr.length; function iter() { if (i < len) { fn(arr[i]); i++; process.nextTick(iter); } else { next(); } } iter(); };