Это «отложенный антипаттерн»?

Мне трудно понять «отложенный антипаттерн». Я думаю, что я понимаю это в принципе, но я не видел супер простой пример того, что сервис, с другим обещанием и один с антипаттерном, поэтому я решил, что я попытаюсь сделать свой собственный, но видя, как я не супер в курсе об этом я сначала получу некоторые разъяснения.

У меня есть ниже на заводе (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()

Ответы на вопрос(3)

Ваш ответ на вопрос