Qualcuno può dirmi se c'è una differenza tra l'utilizzo di una richiamata di errore rispetto a una funzione catch
, quando si utilizza $q.promise
per favore?Promises - callback degli errori contro catch
E.g. i due frammenti di codice sono funzionalmente equivalenti?
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);
Se è così, perché usare la seconda? Sembra molto più brutto e porta a una maggiore duplicazione del codice secondo me?
La seconda versione consente di portare la promessa di nuovo in uno stato deciso di continuare con la catena comunque restituendo qualcosa di diverso da un errore o una promessa respinta. –
E se il gestore errori genera o restituisce una promessa respinta, verrà chiamata tre volte. –