title: async.series and async.each not working as expected
body: <p>I am attempting to build a web scraper using nodeJS that searches a website's HTML for images, caches the image source URLs, then searches for the one with largest size. </p>
  
  <p>The problem I am having is <code>deliverLargestImage()</code> is firing before the array of image source URLs is looped through to get their file sizes. I am attempting to use both <code>async.series</code> and <code>async.each</code> to have this work properly.</p>
  
  <p>How do I force <code>deliverLargestImage()</code> to wait until the <code>async.each</code> inside <code>getFileSizes()</code> is finished?</p>
  
  <p><strong>JS</strong></p>
  
  <pre><code>var async, request, cheerio, gm;
  async = require('async');
  request = require('request');
  cheerio = require('cheerio');
  gm = require('gm').subClass({ imageMagick: true });
  
  function imageScraper () {
    var imgSources, largestImage;
    imgSources = [];
    largestImage = {
      url: '',
      size: 0
    };
  
    async.series([
      function getImageUrls (callback) {
        request('http://www.example.com/', function (error, response, html) {
          if (!error &amp;&amp; response.statusCode === 200) {
            var $ = cheerio.load(html);
            $('img').each(function (i, elem) {
              if ( $(this).attr('src').indexOf('http://') &gt; -1 ) {
                var src = $(this).attr('src');
                imgSources.push(src);
              }
            });
          }
          callback();
        });
      },
      function getFileSizes (callback) {
        async.each(imgSources, function (img, _callback) {
          gm(img).filesize(function (err, value) {
            checkSize(img, value);
            _callback();
          });
        });
        callback();
      },
      function deliverLargestImage (callback) {
        callback();
        return largestImage;
      }
    ]);
  
    function checkSize (imgUrl, value) {
      var r, raw;
      if (value !== undefined) {
        r = /\d+/;
        raw = value.match(r)[0];
        if (raw &gt;= largestImage.size) {
          largestImage.url = imgUrl;
          largestImage.size = raw;
        }
      }
    }
  }
  
  imageScraper();
  </code></pre>