Próbuję uzyskać uchwyt usługi Angular $q
i powiązanych obiektów i interfejsów API. Kiedy patrzę na obiektach w mojej konsoli widzę:
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}
To rodzi kilka pytań:
- Jaka jest różnica między
$q.reject()
ideferred.reject()
? Kiedy używać każdego? - Jaki jest związek między
errorFn
wdeferred.promise.then(successFn, errorFn)
icatchFn
wdeferred.promise.catch(catchFn)
? - Jeśli mam garść zagnieżdżonych obietnic i wystąpi błąd, czy zawsze będzie wywoływana zewnętrzna funkcja
catch()
? Co się stanie, jeśli jedna z zagnieżdżonych obietnic ma również zdefiniowaną funkcję catch? Czy to złapanie uniemożliwi wykonanie najbardziej oddalonego połowu?
Dzięki.
Dzięki za zwięzłe odpowiedzi. Są bardzo jasne.Nadal utknąłem na numerze # 2. Załóżmy, że Twój przykładowy kod zawiera zarówno successFn, jak i errorFn w twoim wywołaniu do then(). Teraz w jakich okolicznościach uruchomi się catchFn? – lostdorje
Zaktualizowałem moją odpowiedź na 2). Metoda catch jest dokładnie taka sama, jak drugi argument funkcji then. promise.catch (errorFn) jest identyczny z promise.then (null, errorFn). – dustyrockpyle
Jeśli ktoś chce przeczytać dalej, kiedy użyć '$ q', uznałem, że ten artykuł jest bardzo pomocny http://www.codelord.net/2015/09/24/$q-dot-defer-youre-doing-it-wrong / – Chris