2017-02-22 1 views
0

안녕하세요 저는 다음 코드를 사용하고 있습니다. clickButton()이 initialize()를 실행하기 전에 완료 될 때까지 스크립트가 기다리는 방법이 필요합니다. 아니면 푸시가 완료 될 때까지 기다리는 중입니까? 어떤 도움을 주시면 감사하겠습니다. 감사합니다'for loop'또는 'push'가 완료 될 때까지 기다렸다가 함수를 실행하십시오. - Javascript

$("#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

나는 자바 스크립트에 익숙하지 않다. 나는 단지 두 개의 분리 된 기능을 연결하려고하고있다. 나는 다른 사람을 기다릴 사람이 필요하고 그것에 대해 어떻게 가야할지 모르겠다. – 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

건배가 완벽하게 작동합니다. 방금 자바 스크립트로 시작했는데 나에게 약간 혼란 스러웠습니다. – Munnaz

+0

@ user2441222 정말이 기사를 읽는 것이 좋습니다. https://www.pluralsight.com/guides/front-end-javascript/introduction-to-asynchronous-javascript –

+0

@ user2441222 자바 스크립트에서 이벤트 루프를 이해하면 모든 것이 훨씬 의미가 있습니다. – subwaymatch