2016-04-08 14 views
1

Ters coğrafi kodlama yapmam ve enlem/boylam bilgisinden şehrin adını almam gerekiyor.

Google harita api'ye $ http yoluyla çağrı yapan bir Açısal hizmet oluşturdum. İade edilen verilerden sadece şehrin ismine ihtiyacım var. Açısal hizmet içinde $ http'un async doğasıyla uğraşıyordum. Çalıştırmak için tek yol, hizmette q $ ile kendi sözümü oluşturmaktı.

Çalışıyor ancak bunu yapmanın doğru yolu olup olmadığından emin değilim. Herhangi bir geri bildirim daha fazladır! İade etmek zorunda kalmamak

var app = angular.module('devApp', []); 

app.factory('reverseGeoCoder', function($http, $q) { 
    var service = { 
     getAddress: function(lat, lng) { 
      var url = 'https://maps.googleapis.com/maps/api/geocode/json?latlng=' + lat + ',' +lng; 
      var deferred = $q.defer(); 

      $http.get(url).then(function(data) { 
       // extract the address and return it to the caller 
       deferred.resolve(data.data.results[0].formatted_address); 
      }, function(reason) { 
       deferred.reject(reason); 
      }); 
      return deferred.promise; 
     } 
    }; 
    return service; 
}); 

app.controller('mainController', function(reverseGeoCoder) { 
    var vm = this; 
    reverseGeoCoder.getAddress(47.353166, 8.558387).then(function(data) { 
      vm.address = data; 
     }, function(reason) { 
      console.log('reverse geocoding failed, reason: ' + reason); 
    }); 
}); 

cevap

2

$http kendisi zaten bir söz verir kendi: İade kez

app.factory('reverseGeoCoder', function($http, $q) { 
    var service = { 
     getAddress: function(lat, lng) { 
      var url = 'https://maps.googleapis.com/maps/api/geocode/json?latlng=' + lat + ',' +lng; 

      return $http.get(url).then(function(data) { 
       // extract the address and return it to the caller 
       return data.data.results[0].formatted_address; 
      }, function(reason) { 
       return reason; 
      }); 
     } 
    }; 
    return service; 
}); 

sürece dönen sözleri tutmak gibi bir .then ile zincirleyin edebilirsiniz bir söz-değer değeri çözülecek/reddedilecektir.