2012-05-10 15 views
0

誰かがJavascriptの原則で私を助けることができるかどうか疑問に思うだけです。私はパラメータとして関数を渡したい場合、これはかなり重大だと思います。私は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; 
} 

答えて

2

なしn-ブロックコード、将来はいつか意味し、私が完了したらお知らせします)。 GoogleのAPIが同期して(ブロックコードとして)動作するようにすることは可能ですが、コールバックの結果に応じてコードを入れたほうが良いでしょう(geocode)。

+0

これは本当に面倒です。私はこの同じ問題で苦労していましたが、解決策を見つけることはできませんでした。 – Mansfield

+0

ありがとう、ええ、コールバック機能にコードを渡しています。 – orangesherbert

0

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

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

このコードを考えてみて:

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

Live DEMO

出力順序:

geocodeが非同期的に起こっているためです

1,3,2