Testing to solve your problem is to use: async.queue
There you have the concurrency attribute, which you can control the speed limit.
// create a queue object with concurrency 2 var q = async.queue(function(task, callback) { console.log('hello ' + task.name); callback(); }, 2); // assign a callback q.drain = function() { console.log('all items have been processed'); }; // add some items to the queue q.push({name: 'foo'}, function(err) { console.log('finished processing foo'); }); // quoted from async documentation
source share