Promises - обратный вызов ошибки против catch
Может ли кто-нибудь сказать мне, существует ли разница между использованием обратного вызова ошибки и функцией catch
при использовании $q.promise
, пожалуйста?
например. являются ли два фрагмента кода функционально эквивалентными?
function doSomething0() {
var deferred = $q.defer();
...
return deferred.promise;
}
doSomething0()
.then(doSomething1)
.then(doSomething2)
.then(doSomething3)
.catch(function (err) {
// do something with `err`
});
против.
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);
Если да, зачем использовать второй? Это выглядит намного уродливее и приводит к увеличению дублирования кода на мой взгляд?
Ответы
Ответ 1
Оба будут добиваться того же, кроме второго, можно запустить errorHandler
три раза (вместо одного раза). Вы правы, что это приводит к дублированию кода, но также позволяет вам обрабатывать любую ошибку и продолжать свою цепочку:
function errorHandler(err) {
//log error, continue
return $q.resolve('default value or something');
}
doSomething0()
.then(doSomething1, errorHandler)
.then(doSomething2, errorHandler)
.then(doSomething3, errorHandler);