2017-02-22 16 views
0

こんにちは私は次のコードを使用しています。私はclickButton()がinitialize()を実行する前に終了するまで、スクリプトが何らかの方法で待つ必要があります。またはプッシュが完了するまで待機していますか?どんな助けもありがとう。ありがとうございます'forループ'または 'プッシュ'が完了してから関数を実行するまで待つ

$("#getButtonValue").click(clickButton); 
function clickButton() { 
    for(i = 1; i < counter; i++){ 
     var geocoder = new google.maps.Geocoder(); 
     var address = $('#textbox' + i).val() 
     geocoder.geocode({ 'address': address}, function (results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
         latCoords.push(results[0].geometry.location.lat()); 
         longCoords.push(results[0].geometry.location.lng()); 
      } 
     }); 
    } 
    initialize(); 
} 
+0

Geocoder.geocodeは約束ですか? –

+0

私はjavascriptに精通していません。私はちょうど2つの別々の機能をリンクしようとしている。私はもう一方を待つ必要があり、それについてどうやって行くのか分からない。 – Munnaz

+0

初期化は事前に呼び出されていますか? –

答えて

0

私は何をしようとしています。

約束を使わないと、簡単な解決策は、すべてのgeocoder.geocode()呼び出しが完了したかどうかを確認するカウンタを作成することです。

$("#getButtonValue").click(clickButton); 
function clickButton() { 
    // A counter variable 
    int completeCount = 0; 
    for(i = 1; i < counter; i++){ 
     var geocoder = new google.maps.Geocoder(); 
     var address = $('#textbox' + i).val() 
     geocoder.geocode({ 'address': address}, function (results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
       latCoords.push(results[0].geometry.location.lat()); 
       longCoords.push(results[0].geometry.location.lng()); 

       // Increment completeCount 
       completeCount++; 

       // If all geocoder.geocode() calls received an "OK", initialize() 
       if (completeCount == counter) { 
        initialize(); 
       } 
      } 
     }); 
    } 
} 
+0

それは完璧に働いて乾杯。私はちょうどjavascriptで始まりました、それは私に少し混乱させてしまいました。 – Munnaz

+0

@ user2441222これを読んで本当にお勧めします。https://www.pluralsight.com/guides/front-end-javascript/introduction-to-asynchronous-javascript –

+0

@ user2441222 javascriptのイベントループを理解すると、すべてがはるかに意味をなさないでしょう。 – subwaymatch

関連する問題