2
\$\begingroup\$

I have multiple API calls so I created a service however I would like to find a way to remove the duplication

myAppServices.factory('apiService', function ($http, $q) {
    return {
        getDocuments: function () {
            return $http.get('/api/autodeskdocuments/1')
                .then(function (response) {
                    if (typeof response.data == 'object') {
                        return response.data;
                    } else {
                        // invalid response
                        return $q.reject(response.data);
                    }
                }, function (response) {
                    // something went wrong
                    return $q.reject(response.data);
            });
        },

        getSharePoint: function () {
            return $http.get('/api/sharepointheaderdata/1')
                .then(function (response) {
                    if (typeof response.data == 'object') {
                        return response.data;
                    } else {
                        // invalid response
                        return $q.reject(response.data);
                    }
                }, function (response) {
                    // something went wrong
                    return $q.reject(response.data);
                });
        }
    };
});

As you can see both functions has some duplication with the .then(...) Any suggestions as to make this cleaner?

\$\endgroup\$
3
\$\begingroup\$

You can extract the whole ajax to a function.

myAppServices.factory('apiService', function ($http, $q) {
    var get = function(endpoint) {
        return $http.get(endpoint)
                .then(function (response) {
                    if (typeof response.data == 'object') {
                        return response.data;
                    } else {
                        // invalid response
                        return $q.reject(response.data);
                    }
                }, function (response) {
                    // something went wrong
                    return $q.reject(response.data);
            });
    }
    return {
        getDocuments: function () {
            return get('/api/autodeskdocuments/1');
        },

        getSharePoint: function () {
            return get('/api/sharepointheaderdata/1');
        }
    };
});
\$\endgroup\$
  • \$\begingroup\$ wow, thanks... that makes more sense and so much cleaner! \$\endgroup\$ – tdelam Feb 11 '15 at 19:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.