2017-02-11 16 views
-1

GoogleマップAPIを使用していますが、アドレスを渡している関数があり、関数は緯度と経度を返しますが、このコード関数は未定義ですが、リターンの代わりにアラートが正常に動作しています、私はこのコードでどこが間違っているか教えてください。 私は過去にajaxコードで同じ問題を抱えていますが、ここではasync = falseを使用しています。javascript関数は未定義ですが、アラートで正常に動作します

<script> 
 
    function GetLocation(address) { 
 
      var geocoder = new google.maps.Geocoder(); 
 
      
 
      geocoder.geocode({ 'address': address }, function (results, status) { 
 
      
 
     
 
       if (status == google.maps.GeocoderStatus.OK) { 
 
        var latitude = results[0].geometry.location.lat(); 
 
        var longitude = results[0].geometry.location.lng(); 
 
      return longitude; 
 
      //   alert("Latitude: " + latitude + "\nLongitude: " + longitude); 
 
      // return latitude; 
 
      
 
       } else { 
 
        
 
      return "Request failed."; 
 
       } 
 
     
 
      }); 
 

 
     }; 
 
    
 
    
 
var abc = GetLocation(address); 
 

 
alert(abc); 
 

 
</script>

答えて

2

あなたgeocode()は非同期呼び出しであり、あなたはそれから何かを返すことはできません。したがって、コールバック関数の結果に依存するロジックを継続する必要があります。

またはPromiseを使用して、結果を得るためにいくつかのロジックを変更する必要があります。しかし、再び約束によって、あなたはそれから何も返すことができません。 |

このコードでは、関数から戻り値Promiseを作成します。 PromiseOKの場合はの機能を、もう1つは何か問題がある場合は機能します。すべてが問題ない場合は、パラメータで呼び出します。 Promiseには、.then()関数を呼び出して2つの関数を渡すことができます。最初にresolve functionとして渡され、第2の数値はreject functionとして渡されます。したがって、この場合、resolveを呼び出すと、パラメータは最初の関数.then()に渡され、そこで取得されます。

function GetLocation(address) { 
 
    return new Promise(function(resolve, reject) { 
 
     var geocoder = new google.maps.Geocoder(); 
 
     geocoder.geocode({ 'address': address }, function (results, status) { 
 
        
 
     if (status == google.maps.GeocoderStatus.OK) { 
 
      var latitude = results[0].geometry.location.lat(); 
 
      var longitude = results[0].geometry.location.lng(); 
 
      resolve(longitude); 
 
     } else { 
 
      reject("Request failed."); 
 
     }   
 
     }); 
 
    });  
 
}; 
 
       
 
var address = 'yourAddress'; 
 
GetLocation(address).then(longitude => alert(longitude));

約束

new Promise((resolve, reject) =>{ 
 
    var a = true; // < Here `a` is true, so resolved function is called in `then` 
 
    if(a){ 
 
    resolve(a); 
 
    } else { 
 
    reject('A is not True !'); 
 
    } 
 
}).then(val => alert(val)); 
 

 

 
new Promise((resolve, reject) =>{ 
 
    var a = false; // < Here `a` is false, so rejected function is called `then` 
 
    if(a){ 
 
    resolve(a); 
 
    } else { 
 
    reject('A is not True !'); 
 
    } 
 
}).then(val => alert(val), err => alert(err));

+0

との基本的な例ちょっと多く、このヘルプのためのsrapyan感謝を@suren ..... – Raahull

関連する問題