2016-11-23 86 views
1

我該如何角色化這個js函數?我需要它異步使用。我的理解是,然後角度可以做到這一點。將js回調函數轉換爲帶有promise的angular。然後

function showResult(result) { 
     var lat = result.geometry.location.lat(); 
     var long = result.geometry.location.lng(); 
     $scope.vm.showroom.Longitude = long; 
     $scope.vm.showroom.Latitude = lat; 

    } 

    function GetLatitudeLongitude(callback, address) { 
     var address1 = address || '234 eisenhower avenue salt lake city'; 
     // Initialize the Geocoder 
     var geocoder = new google.maps.Geocoder(); 
     if (geocoder) { 
      geocoder.geocode({ 
       'address': address1 
      }, function (results, status) { 
       if (status == google.maps.GeocoderStatus.OK) { 
        callback(results[0]); 
       } 
      }); 
     }   
    } 
+0

查覈在角 HTTPS的'$ q'服務: //docs.angularjs.org/api/ng/service/$q – LoganRx

回答

4

你可以做這樣的事情:

function GetLatitudeLongitude(address) { 
     address = address || '234 eisenhower avenue salt lake city'; 

     var deferred = $q.defer(); 
     // Initialize the Geocoder 
     var geocoder = new google.maps.Geocoder(); 

     if (!geocoder) { 
      deferred.reject('No geocoder available.'); 
      return deferred.promise; 
     } 

     geocoder.geocode({ 
      'address': address 
     }, function (results, status) { 
      if (status !== google.maps.GeocoderStatus.OK) { 
       return deferred.reject('Geocoder status error.'); 
      } 

      deferred.resolve(results[0]); 
     }); 

     return deferred.promise; 
    } 

,然後你可以這樣調用該函數:

GetLatitudeLongitude(address).then(function (result) { 
    var lat = result.geometry.location.lat(); 
    var long = result.geometry.location.lng(); 
    $scope.vm.showroom.Longitude = long; 
    $scope.vm.showroom.Latitude = lat; 
}); 
相關問題