0

誰かがJavascriptの原則で私を助けることができるかどうか疑問に思っています. 関数をパラメーターとして渡したい場合、これはかなりコアだと思います。私は Javascript について少し知っていますが、その微妙な点についてはおそらく十分ではないことを認めます。

したがって、codeAddress が呼び出され、最初のアラート (HERE2) に到達し、コードが showOnMap 関数に戻り、2 番目のアラート (HERE3) に到達します。HERE2 アラートの前に HERE3 アラートが表示されるのはなぜですか? Javascriptに待機するように指示するためにできることはありますか?

前もって感謝します

function showOnMap() {
    var inputStart = document.getElementById('CurrentHitch_StartDescription').value;
    var inputEnd = document.getElementById('CurrentHitch_EndDescription').value;
    codeAddress(inputStart, true); //HERE1*************
    codeAddress(inputEnd, false);
    var bounds2 = new google.maps.LatLngBounds(this.markerStart.getPosition());
    bounds2.extend(this.markerEnd.getPosition());
    map.fitBounds(bounds2);
    alert('showOnMap'); //HERE3*************
}

function codeAddress(address, isStart) {
    geocoder.geocode({ 'address': address }, function (results, status) {
        alert('codeAddress'); //HERE2*************
        if (status == google.maps.GeocoderStatus.OK) {
            if (isStart) {
                markerStart.setPosition(results[0].geometry.location);
            }
            else {
                markerEnd.setPosition(results[0].geometry.location);
            }
        } else {
            alert("Sorry, couldn't find your destination: " + status);
        }
    });
    return;
}
4

2 に答える 2

2

これgeocodeは、非同期で行われているためです (ノンブロッキングコード、つまり将来のいつかのことです。完了したらお知らせします)。Google の API に (ブロッキング コードとして) 同期的に動作するように指示することは可能かもしれませんが、結果に依存するコードをgeocode.

于 2012-05-11T00:01:38.323 に答える
0

世界へようこそajax...
geocodeは google が提供する ajax サービスです。

非同期リクエストを送信し、それが返されるのを待たずにコードを続行し、「3 番目の」アラートが発生し、非同期リクエストが戻ってきて、「2 番目の」アラートを発生させます。

このコードについて考えてみましょう:

alert('1');
setTimeout(function(){ 
    alert('2');
}, 1000); // fire the function after one second.
alert('3');

ライブデモ

出力順:

1,3,2

于 2012-05-11T00:01:04.667 に答える