2014-11-20 1 views
1

Google지도 지오 코딩 API를 사용하여 businesses 배열의 10-15 개 주소 목록을 위도/경도 좌표로 변환하려는 코드는 다음과 같습니다.실패하면 javascript를 다시 실행하는 방법은 무엇입니까?

var geocoder = new google.maps.Geocoder(); 

var proms = businesses.map(function(address) { 
    return prom = new Promise(function(resolve) { 
     geocoder.geocode({ 
      address: address 
     }, function(results, status) { 

      if (status === google.maps.GeocoderStatus.OK) { 
       resolve({ 
        results: results, 
        business: address 
       }); 

      } else if (status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT) { 
       setTimeout(function() { 
        //HOW DO I RE-RUN THIS "new Promise"? 
       }, 1000); 

      } else { 
       console.log(status + ': ' + results); 
      } 

     }); 
    }); 
}); 
Promise.all(proms); 

문제는 몇 초 후 실패 약속을 다시 실행 할 수있는 방법이 있는지 궁금 그래서 구글의 API는 때때로 OVER_QUERY_LIMIT 오류를 반환 할 것입니다. 위의 예제에서 else if 문은 오류를 catch하므로 시간 초과 후 다시 실행하게하려면 어떻게해야합니까?

방금 ​​약속을 사용하기 시작했는데 아직 잘 이해하지 못했지만 어떻게 작동하는지 알기 때문에 내 접근 방식이 완전히 잘못되었을 수 있습니다. 또한이 모든 것은 Google API가 일괄 적으로 주소를 해결하지 못한다는 가정하에 수행됩니다. 그렇지 않은 경우 알려 주시기 바랍니다.

답변

-1

한 번이 오류가 발생했습니다. 요청을 너무 빨리 보내므로 각 요청 사이에 잠깐 기다리십시오.

2

코드 본문을 함수에 넣고 타이머에서 다시 호출 할 수 있습니다. 참고 :이 기술적으로 완료되면 그 다음 약속을 해결할 코드 블록을 다시 실행있어, 약속을 다시 실행되지 않습니다 코드가 오류에 갇혀 만나지 수

var proms = businesses.map(function(address) { 
    return prom = new Promise(function(resolve, reject) { 
     var retriesRemaining = 5; 
     function run() { 
      geocoder.geocode({ 
        address: address 
       }, function(results, status) { 

        if (status === google.maps.GeocoderStatus.OK) { 
         resolve({ 
          results: results, 
          business: address 
         }); 

        } else if (status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT) { 
         --retriesRemaining; 
         if (retriesRemaining <= 0) { 
          reject(status); 
         } else { 
          setTimeout(run, 1000); 
         } 
        } else { 
         console.log(status + ': ' + results); 
        } 

       } 
      }); 
     } 
     run(); 
    }); 
}); 
Promise.all(proms); 

을 참고로, 나는 또한 재시도 횟수를 추가 고리.

이 게시물에 관심이있을 수 있습니다 : How to avoid Google map geocode limit?.

+0

"유망한"(말장난 의도)으로 보입니다. 저는 250P 현상금에 관한 질문으로 동일한 문제에 직면하고 있습니다. http://stackoverflow.com/questions/36266442/inaccurate-google-maps-elevation -service-response-when-splitting-a-too-large-pat 현재 코드를 가지고있는 곳은 아니지만이 코드를 사용해 보겠습니다. 내 문제에 대한 더 나은 대안이 있다면 그것에 대해 듣고 싶습니다. – Ben

관련 문제