title: Error handling Async Waterfall with nested callbacks
body: <p>I am using async.parallel inside <code>async.waterfall( [] , function() )</code>. The code is as follows: </p>
  
  <pre><code>async.waterfall(
    [
      function first(callback) {
        //some processing
        callback();
      },
      function second(result, callback) {
        //Here i query the db
        model.findAll()
          .then(function(success) {
            async.parallel(
              [array_of_functions],
              function done(err, result) {
                if (err) {
                  callback(err);
                }
              }
            )
          })
          .catch(function(err) {
            callback(err);
          })
      }
    ],
    function done(err, result) {
      if (err) {
        throw new Error(err);
      }
    }
  )
  </code></pre>
  
  <p>Sometime i gets an error on console:</p>
  
  <blockquote>
    <p>callback was already called</p>
  </blockquote>
  
  <p>The error message tells that callback is getting invoked multiple times. I think <code>callback(err)</code> inside <code>async.parallel()</code> and <code>.catch()</code> are getting invoked simultaneously. 
  This essentially means that if an error occurs <strong>INSIDE</strong> <code>.then()</code> it gets caught in <code>.catch()</code>. Is this how it works? Secondly if I wish to propagate error in nested callback to final <code>done()</code> function of <code>async.waterfall()</code> how can I do that.   </p>