title: Async parallel HTTP request
body: <p>I'm having a control flow problem with an application loading a large array of URLs. I'm using Caolan Async and the NPM request module.</p>
  
  <p>My problem is that the HTTP response starts as soon as the function is added to the queue. Ideally I want to build my queue and only start making the HTTP requests when the queue starts. Otherwise the callbacks start firing before the queue starts - causing the queue to finish prematurely.</p>
  
  <pre><code>var request = require('request') // https://www.npmjs.com/package/request
      , async = require('async'); // https://www.npmjs.com/package/async
  
  var myLoaderQueue = []; // passed to async.parallel
  var myUrls = ['http://...', 'http://...', 'http://...'] // 1000+ urls here
  
  for(var i = 0; i &lt; myUrls.length; i++){
      myLoaderQueue.push(function(callback){
  
          // Async http request
          request(myUrls[i], function(error, response, html) {
  
              // Some processing is happening here before the callback is invoked
              callback(error, html);
          });
      });
  }
  
  // The loader queue has been made, now start to process the queue
  async.parallel(queue, function(err, results){
      // Done
  });
  </code></pre>
  
  <p>Is there a better way of attacking this?</p>