Я пытаюсь получить дескриптор службы Angular $q и связанных с ним объектов и API. Когда я смотрю на объекты в консоли, я вижу:
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}
Возникает несколько вопросов:
-  В чем разница между 
$q.reject()иdeferred.reject()? Когда использовать каждый? -  Какая связь между 
errorFnвdeferred.promise.then(successFn, errorFn)иcatchFnвdeferred.promise.catch(catchFn)? -  Если у меня есть куча вложенных promises и возникает ошибка, всегда будет вызываться самая внешняя функция 
catch()? Что, если одна из вложенных promises также имеет функцию catch? Будет ли этот улов предотвращать выполнение самого внешнего улова? 
Спасибо.