Ai đó có thể cho tôi biết nếu có sự khác biệt giữa việc sử dụng lỗi gọi lại với chức năng catch
, khi sử dụng $q.promise
vui lòng?Lời hứa - gọi lại lỗi so với số điện thoại
Ví dụ: hai đoạn mã tương đương với hàm là gì?
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);
Nếu vậy, tại sao sử dụng cái thứ hai? Nó trông xa xấu xí hơn và dẫn đến sao chép mã nhiều hơn trong quan điểm của tôi?
Phiên bản thứ hai cho phép bạn đưa lời hứa trở lại trạng thái đã giải quyết để tiếp tục với chuỗi bằng cách trả lại bất kỳ điều gì khác ngoài lỗi hoặc lời hứa bị từ chối. –
Và nếu trình xử lý lỗi ném hoặc trả về một lời hứa bị từ chối, nó sẽ được gọi ba lần. –