Это «отложенный антипаттерн»?
Мне трудно понять «отложенный антипаттерн». Я думаю, что я понимаю это в принципе, но я не видел супер простой пример того, что сервис, с другим обещанием и один с антипаттерном, поэтому я решил, что я попытаюсь сделать свой собственный, но видя, как я не супер в курсе об этом я сначала получу некоторые разъяснения.
У меня есть ниже на заводе (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, я делаю еще один улов, чтобы получить ошибку.
Если это НЕ антипаттерн, то кто-то может объяснить, почему оба требуют своего рода «обратного вызова»? Когда я впервые начал писать эту фабрику / директиву, я ожидал, что придется где-то сделать отложенное обещание, но я не ожидал, что придется.catch()
с обеих сторон (иначе я как бы думал, что смогу заставить фабрику вернуть ответ или ошибку, если я сделалSomeFactory.getData()