/**
* 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();
};