J'ai travaillé avec une usine intégrée avec la saisie semi-automatique de google maps et les promesses faites, j'espère que vous servez. 
http://jsfiddle.net/the_pianist2/vL9nkfe3/1/    
il vous suffit de remplacer autocompleteService par cette requête avec $ http incuida devant l'usine. 
app.factory('Autocomplete', function($q, $http) {
et $ http request avec
 var deferred = $q.defer();
 $http.get('urlExample').
success(function(data, status, headers, config) {
     deferred.resolve(data);
}).
error(function(data, status, headers, config) {
     deferred.reject(status);
});
 return deferred.promise;
<div ng-app="myApp">
  <div ng-controller="myController">
  <input type="text" ng-model="search"></input>
  <div class="bs-example">
     <table class="table" >
        <thead>
           <tr>
              <th>#</th>
              <th>Description</th>
           </tr>
        </thead>
        <tbody>
           <tr ng-repeat="direction in directions">
              <td>{{$index}}</td>
              <td>{{direction.description}}</td>
           </tr>
        </tbody>
     </table>
  </div>
'use strict';
 var app = angular.module('myApp', []);
  app.factory('Autocomplete', function($q) {
    var get = function(search) {
    var deferred = $q.defer();
    var autocompleteService = new google.maps.places.AutocompleteService();
    autocompleteService.getPlacePredictions({
        input: search,
        types: ['geocode'],
        componentRestrictions: {
            country: 'ES'
        }
    }, function(predictions, status) {
        if (status == google.maps.places.PlacesServiceStatus.OK) {
            deferred.resolve(predictions);
        } else {
            deferred.reject(status);
        }
    });
    return deferred.promise;
};
return {
    get: get
};
});
app.controller('myController', function($scope, Autocomplete) {
$scope.$watch('search', function(newValue, oldValue) {
    var promesa = Autocomplete.get(newValue);
    promesa.then(function(value) {
        $scope.directions = value;
    }, function(reason) {
        $scope.error = reason;
    });
 });
});
la question elle-même est à poser sur: 
deferred.resolve(varResult); 
quand vous avez bien fait et la demande:
deferred.reject(error); 
quand il y a une erreur, et ensuite:
return deferred.promise;