Foros del Web » Programando para Internet » Javascript »

Detener script

Estas en el tema de Detener script en el foro de Javascript en Foros del Web. Tengo un archivo con más de 1300 coordenadas geograficas. Hice un script para llamar a la API 3 de google maps para obtener la dirección ...
  #1 (permalink)  
Antiguo 14/06/2012, 08:18
 
Fecha de Ingreso: diciembre-2009
Mensajes: 15
Antigüedad: 14 años, 3 meses
Puntos: 0
Detener script

Tengo un archivo con más de 1300 coordenadas geograficas. Hice un script para llamar a la API 3 de google maps para obtener la dirección asociada mediante geolocalización inversa. El código que desarrollé funciona perfectamente, pero google pone un límite al número de llamadas que puedes hacer a su API en determinado tiempo y llega un momento en que devuelve el error OVER_QUERY_LIMIT.
Lo que quiero es, después de cada llamada, detener la ejecución del script durante 3, 5 o 10 segundos antes de realizar la siguiente llamada. Con setTimeout no lo consigo, ya que lo que hace es retrasar la ejecución de la función que tiene asociada el número de milisegundos que le digamos, pero el flujo del script, las instrucciones que haya por debajo del setTimeout, continúa.
¿Hay algún modo de hacerlo? Gracias por adelantado.
  #2 (permalink)  
Antiguo 14/06/2012, 09:31
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
Respuesta: Detener script

setInterval()
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #3 (permalink)  
Antiguo 14/06/2012, 09:44
 
Fecha de Ingreso: diciembre-2009
Mensajes: 15
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Detener script

Gracias, pero por lo que veo setInterval tampoco detiene el flujo del script. Si, por ejemplo, se pone dentro de un bucle for (var k = 0; k < strs.length; ++k) k va tomando valores aunque la función que se ha puesto dentro de setTimeout o setInterval esté esperando para ejecutarse.
  #4 (permalink)  
Antiguo 14/06/2012, 10:23
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
De acuerdo Respuesta: Detener script

Supongo que no leíste lo que te pase...

Cita:
El método clearInterval () se utiliza para detener las ejecuciones adicionales de la función especificada en el método setInterval ().
Si no sabes leer inglés, traducelo con google translator...

Saludos!
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #5 (permalink)  
Antiguo 14/06/2012, 10:28
 
Fecha de Ingreso: diciembre-2009
Mensajes: 15
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Detener script

"El método clearInterval () se utiliza para detener las ejecuciones adicionales de la función especificada en el método setInterval ()."

Parece que no me entiendes, Ahí pone que detiene las ejecuciones adicionales de la función especificada en el método setInterval(), pero no del resto del código del script, que es lo que yo quiero, que no continue la ejecución del bucle for dentro del cual está la llamada a la api de google maps.
  #6 (permalink)  
Antiguo 14/06/2012, 10:32
 
Fecha de Ingreso: diciembre-2009
Mensajes: 15
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Detener script

Es decir, haga una llamada, espere 5 segundos, haga otra llamada, espere otros 5 segundos, haga otra llamada... así hasta que termine con las 1300 coordenadas. Eso no se consigue con setTimeout.
  #7 (permalink)  
Antiguo 18/06/2012, 05:22
 
Fecha de Ingreso: diciembre-2009
Mensajes: 15
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Detener script

Parece que nadie sabe.
  #8 (permalink)  
Antiguo 18/06/2012, 07:32
txemaarbulo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Detener script

CarlosVillarrubia

Puedes probar con un else if,
Código Javascript:
Ver original
  1. if (status == google.maps.GeocoderStatus.OK) {
  2.    // Tu desarrollo de código: marcadores, infowindows, ...
  3. }
  4. /* Cuando geocodificación no tiene éxito por un error de cuotas*/
  5. else if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
  6.   wait = true;
  7.   setTimeout("wait = false", 1000);
  8.        } else {
  9.            alert("Geocode no tuvo éxito por " + status);
  10.        }

Si esto no te funciona, revisa la forma de cargar la conversión de direcciones del lado del servidor (contrapuesto al lado del cliente). También tiene sus limitaciones pero allá por las 2500 consultas.

Última edición por txemaarbulo; 18/06/2012 a las 07:37
  #9 (permalink)  
Antiguo 19/06/2012, 03:57
 
Fecha de Ingreso: diciembre-2009
Mensajes: 15
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Detener script

Gracias, probé ese código pero no resultó, le seguiré dando vueltas.
También he leído que se puede hacer con php pero no sé bien cómo.
  #10 (permalink)  
Antiguo 19/06/2012, 04:53
txemaarbulo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Detener script

Por interés personal he estado investigando un poco más el tema. Ya lo intuía en mi anterior entrada

Personalmente nunca he llegado a necesitar un empleo más a fondo de la geocodificación.

Lo que veo claro es que la solución que te pasaba se considera arcaica y, de paso, te envío una variante.
Código Javascript:
Ver original
  1. function Geocode(address) {
  2.     geocoder.geocode({
  3.         'address': address
  4.     }, function(results, status) {
  5.         if (status === google.maps.GeocoderStatus.OK) {
  6.             var result = results[0].geometry.location;
  7.             var marker = new google.maps.Marker({
  8.                 position: result,
  9.                 map: map
  10.             });
  11.         } else if (status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {    
  12.             setTimeout(function() {
  13.                 Geocode(address);
  14.             }, 200);
  15.         } else {
  16.             alert("Geocode no tuvo éxito por la razón siguiente:"
  17.                   + status);
  18.         }
  19.     });
  20. }

La solución que ofrecen actualmente es a través de una solicitud de Geocoding API. Las soluciones nos llevan a conversiones a JSON ó XML, que nos permite realizar previamente la inversión de la geocodificación.

Leo, confirmando lo que te dije, que podemos hacer un límite de consultas de 2.500 solicitudes y con el servicio premium 100.000 al día.

La documentación puedes encontrarla [URL="https://developers.google.com/maps/documentation/geocoding/index?hl=es"]aquí[/URL].
  #11 (permalink)  
Antiguo 19/06/2012, 05:02
 
Fecha de Ingreso: diciembre-2009
Mensajes: 15
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Detener script

Sí, creo que el código que me pasas está utilizando la api2 y yo utilizo la api3.
Estudiaré los enlaces que me pasas, como dices, necesito utilizar geolocalización inversa.

Etiquetas: detener, funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:55.