Czy ktoś może mi powiedzieć, czy jest różnica między korzystaniem z funkcji oddzwaniania błędu a funkcją catch
, jeśli korzystasz z numeru $q.promise
?Obietnice - błąd oddzwaniania w porównaniu do przechwytywania
E.g. są dwa fragmenty kodu funkcjonalnie równoważne?
function doSomething0() {
var deferred = $q.defer();
...
return deferred.promise;
}
doSomething0()
.then(doSomething1)
.then(doSomething2)
.then(doSomething3)
.catch(function (err) {
// do something with `err`
});
vs.
function doSomething0() {
var deferred = $q.defer();
...
return deferred.promise;
}
function errorHandler(err) {
// do something with `err`
}
doSomething0()
.then(doSomething1, errorHandler)
.then(doSomething2, errorHandler)
.then(doSomething3, errorHandler);
Jeśli tak, to dlaczego korzystać z drugą? Wygląda o wiele brzydiej i moim zdaniem prowadzi do większej duplikacji kodu?
Druga wersja pozwala na dostosowanie obietnicę powrotem do uchwalonej stanie kontynuować w każdym razie, zwracając cokolwiek poza błędem lub odrzuconą obietnicą. –
A jeśli program obsługi błędów wyrzuci lub zwróci odrzuconą obietnicę, zostanie wywołany trzy razy. –