I have this code in a service, it works for me. As far as I know, $http.get() returns a promise, promise executes asynchronously, so why do I need to use deffered.resolve(res.data) to return data in my service. Thanks a lot.
 data.posts = function(page, perPage, format, orderBy) {
        var deffered = $q.defer();
        $http.get(hostName, {
            params: {
                'page': page,
                'per_page': perPage,
                'filter[post_format]=': format,
                'filter[orderby]=': orderBy,
                'order': 'desc'
            }
        }).then(function(res) {
            deffered.resolve(res.data);
        })
        return deffered.promise;
    }
 
     
     
     
    