2

私はjavascriptでジオコーダーに取り組んでいます。アドレスを取得して座標を正しく与える codeAddress という名前の関数があります。ただし、この関数を別の関数で呼び出すと、呼び出し元関数が codeAddress 関数の前に終了するため、正しい結果が得られません。これが私のコードです:

    var geocoder = new google.maps.Geocoder();
    var lokasyon ={ id:0,lat:0,lng:0 };
    var lokasyonlar=[];
    function codeAddress(adres, id) {
        geocoder.geocode({ 'address': adres }, function (results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                lokasyon.id = id;
                lokasyon.lat = results[0].geometry.location.lat();
                lokasyon.lng = results[0].geometry.location.lng();
                lokasyonlar.push(lokasyon);
                alert("codeAddress");
            } else {
                alert("Geocode was not successful for the following reason: " + status);
            }
        });
    }
    function trial2() {
        codeAddress("1.ADA SOKAK, ADALET, OSMANGAZİ, Bursa", 12);
        alert("trial2");
    }
    window.onload = trial2;

このコードを実行すると、最初に「trial2」が表示され、次に「codeAddress」が表示されます。これの理由は何ですか?

4

1 に答える 1

1

geocoder.geocode() メソッドが Google サーバーに要求するため、数秒かかります。これは、geocode() メソッドが非同期であり、alert("trial2") がコールバックよりも高速であることを意味します。

コールバックの後にコード 'alert("trial2")' を実行する場合は、次のように変更する必要があります。

function codeAddress(adres, id, callback) {
    geocoder.geocode({ 'address': adres }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            lokasyon.id = id;
            lokasyon.lat = results[0].geometry.location.lat();
            lokasyon.lng = results[0].geometry.location.lng();
            lokasyonlar.push(lokasyon);
            alert("codeAddress");
        } else {
            alert("Geocode was not successful for the following reason: " + status);
        }
        callback();
    });
}
function trial2() {
    codeAddress("1.ADA SOKAK, ADALET, OSMANGAZİ, Bursa", 12, function(){
      alert("trial2");
    });
}
于 2012-11-20T08:05:46.153 に答える