title: Angular's $q.reject() vs deferred.reject()
body: <p>I'm trying to get a handle on the Angular <code>$q</code> service and its related objects and APIs. When I look at the objects in my console I see:</p>
  
  <pre><code>var deferred = $q.defer()
  
  ...(and then from console inspection)...
  
  $q: Object {defer: function, reject: function, when: function, all: function}
  
  deferred: Object {resolve: function, reject: function, notify: function, promise: Object}
  
  deferred.promise: Object {then: function, catch: function, finally: function}
  </code></pre>
  
  <p>It raises a few questions:</p>
  
  <ol>
  <li>What's the difference between <code>$q.reject()</code> and <code>deferred.reject()</code>? When to use each?</li>
  <li>What's the relationship between the <code>errorFn</code> in <code>deferred.promise.then(successFn, errorFn)</code> and the <code>catchFn</code> in <code>deferred.promise.catch(catchFn)</code>?</li>
  <li>If I have a bunch of nested promises and an error occurs, will the outermost <code>catch()</code> function always be called? What if one of the nested promises also has a catch function defined? Will that catch prevent the outermost catch from executing?</li>
  </ol>
  
  <p>Thanks.</p>