Мне трудно понять "отсроченный антипаттерн". Я думаю, что я понимаю это в принципе, но я не видел супер простого примера того, что служба, с разным обещанием и с антипаттерном, поэтому я решил, что попытаюсь сделать свой собственный, но посмотрю, как я не супер в знании об этом, я сначала получу разъяснение.
У меня есть ниже в factory (SomeFactory):
//url = 'data.json';
return {
getData: function(){
var deferred = $q.defer();
$http.get(destinationFactory.url)
.then(function (response) {
if (typeof response.data === 'object') {
deferred.resolve(response.data);
} else {
return deferred.reject(response.data);
}
})
.catch(function (error) {
deferred.reject(error);
});
return deferred.promise;
}
Причина, по которой я проверяю его объект, - это просто добавить простой уровень проверки на $http.get()
И ниже, в моей директиве:
this.var = SomeFactory.getData()
.then(function(response) {
//some variable = response;
})
.catch(function(response) {
//Do error handling here
});
Теперь, к моему неуверенности, это антипаттерн. Потому что оригинальное отложенное обещание ловит ошибку и просто проглатывает ее. Он не возвращает ошибку, поэтому, когда вызывается этот метод getData, я делаю еще один улов, чтобы захватить ошибку.
Если это НЕ антипаттерн, может ли кто-нибудь объяснить, почему оба требуют "обратного вызова"? Когда я впервые начал писать эту директиву factory/, я ожидал, что буду делать обещанное обещание где-нибудь, но я не ожидал, что должен быть .catch()
с обеих сторон (иначе я думал, что могу получить factory верните ответ или ошибку, если я сделал SomeFactory.getData()