2016-11-23 84 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; 
}); 
相关问题