How can I timeout a google maps geocoder via javascript?

我与影子孤独终老i 提交于 2019-12-13 01:12:03

问题


I am very new to javascript and I am having issues with timing out the geocoder requests. But I am stuck, I tries to add delays into loop, but seems like they don't work. If you can help, I would appreciarte it.

        <script type="text/javascript">

        function setLocationOnMap(locs) {
            var myOptions = {
                zoom: 4,
                center: new google.maps.LatLng(locs.lat(), locs.lng()),
                mapTypeId: google.maps.MapTypeId.ROADMAP          
            };
            var map = new google.maps.Map(document.getElementById('map_canvas'), myOptions); 

            var i=0;
            var total='<?php echo $counter ?>';

            for (i=0; i<total;i++){//adding cities to map by
                var city= document.the_form.elements[i].value;

                getLatLong2(city, map, setPointer);
            }                
        }

        function setPointer(map, address, locs2){
            var position = new google.maps.LatLng(locs2.lat(), locs2.lng());
            var marker = new google.maps.Marker({
                position: position,
                map: map
            });
            marker.setTitle(address);
        }


        function initialize() {
            var address = "Chicago IL";
            getLatLong(address, setLocationOnMap);
        }

        function getLatLong2(address, map, callback){
            var geo = new google.maps.Geocoder;
            geo.geocode({'address':address},function(results, status){
                if (status == google.maps.GeocoderStatus.OK) {
                    locs2 = results[0].geometry.location; 

                    callback(map, address, locs2);
                } else {
                    //alert("Geocode was not successful for the following reason: " + status);
                }
            });
        }



        function getLatLong(address, callback){
            var geo = new google.maps.Geocoder;
            geo.geocode({'address':address},function(results, status){
                if (status == google.maps.GeocoderStatus.OK) {
                    // processing...
                    locs = results[0].geometry.location; 
                    //pausecomp(10000);

                    callback(locs);
                } else {
                    //alert("Geocode was not successful for the following reason: " + status);
                }
            });
        }
    </script>

回答1:


When you submit the geocode request, you can start a timer in parallel and when the timer fires, you can declare the request to have timed out. The request will still continue, but you can ignore the results once it has timed out:

function getLatLong(address, callback){
    var timerId;
    var timedOut = false;

    var geo = new google.maps.Geocoder;
    geo.geocode({'address':address},function(results, status){
        if (timedOut) {
            // this request timed out, so ignore results
            return;
        } else {
            // this request succeeded, so cancel timer
            clearTimeout(timerId);
        }

        if (status == google.maps.GeocoderStatus.OK) {
            locs = results[0].geometry.location; 
            callback(locs);
        } else {
            //alert("Geocode was not successful for the following reason: " + status);
        }
    });

    timerId = setTimeout(function() {
        timedOut = true;
        alert('Request timed out.');
        // do something else
    }, 10000);
}


来源:https://stackoverflow.com/questions/9014473/how-can-i-timeout-a-google-maps-geocoder-via-javascript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!