Как оптимизировать цикл — перебора «for» JavaScript?
Сейчас ваш скрипт запускает textFileToArray() с максимально возможной скоростью, и запускает множество setTimeout(..., 5000) которые запустятся через 5 секунд, много-много штук почти одновременно. Я догадываюсь, что вы хотели чего-то другого, но по вашему описанию непонятно чего именно.
использовать WebWorker
www.w3.org/TR/workers
или разбить на пакеты и учиться использовать промисы:var requestAsync = function (cb, ecb) {
    var pr = $.Deferred();
    $.ajax({
        url: url,
        type: 'post',
        data: {
        },
        success: function (data) {
            if (cb)
                cb(data);
            pr.resolve();
        },
        error: function (xhr, status, error) {
            if (ecb)
                ecb();
            pr.resolve();
        }
    });
    return pr;
};
var chunkSize = 5;
var f = function(fcb){
	var promises = [];	
	for (var i = 0; i < Math.min(urls.length, chunkSize); i++)
		promises.push(requestAsync(args));
	if(promises.length)
		$.when.apply($, promises).done(function(){
			setTimeout(f.bind(fcb, this), 1);
		});
	else{
		fcb();
	}
}
f(function(){
	console.log('complete');
});
но стоит помнить о проблемах: jquery промисы не являются промисами а+