comment ralentir une boucle javascript
Je voudrais ajouter 1 à 2 secondes de retard sur chaque itération de la boucle suivante.
<html>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<input id="start" type="submit"> </input>
<div id='status'></div>
<script>
var geocoder=new google.maps.Geocoder();
var glGeocodeCount = 0 ;
$(document).ready(function() {
$('#start').click(function() {
//srPerformGeocode("TD Tower, 55 King Street West, Toronto, ON, Canada, M5K 1A2");
for(x=0;x<20;x++){
srPerformGeocode("TD Tower, 55 King Street West, Toronto, ON, Canada, M5K 1A2");
}
return false;
});
});
function srPerformGeocode(address){
if (geocoder){
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK){
$('#status').prepend("Success : " + address + "<br/>");
}
else{
$('#status').prepend("Failed : " + address + "<br/>");
}
});
}
}
</script>
Pourquoi êtes-vous géocodage la même adresse 20 fois?
à titre d'exemple. J'ai noté que certains de l'API de fournisseurs (comme google) ne vous aime pas frapper trop arrivait fréquemment sur leurs portes. Je voudrais réduire la fréquence de l'appel à l'aide d'une minuterie, mais j'ai du mal à l'utiliser dans une boucle,
C'est vrai, mais pourquoi voudriez-vous bang sur leurs portes pour demander la même chose à chaque fois?
Je ne le ferais pas, mais il ne serait pas ajouter beaucoup à la question de l'inclusion de 20 (ou 200 adresses). Ma question est plus sur de retarder les boucles.
à titre d'exemple. J'ai noté que certains de l'API de fournisseurs (comme google) ne vous aime pas frapper trop arrivait fréquemment sur leurs portes. Je voudrais réduire la fréquence de l'appel à l'aide d'une minuterie, mais j'ai du mal à l'utiliser dans une boucle,
C'est vrai, mais pourquoi voudriez-vous bang sur leurs portes pour demander la même chose à chaque fois?
Je ne le ferais pas, mais il ne serait pas ajouter beaucoup à la question de l'inclusion de 20 (ou 200 adresses). Ma question est plus sur de retarder les boucles.
OriginalL'auteur Mustapha George | 2012-02-01
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire de cette façon avec
setTimeout()
:Cela ne me font me demander pourquoi vous êtes en train de faire un géocodage à la recherche d'exactement la même adresse 20 fois de suite?
OriginalL'auteur jfriend00
Vous voudrez probablement utiliser une minuterie pour cela. Si vous venez de mettre une boucle de retard dans le code, le résultat ne serait que le code prend plus de temps, mais le résultat final va se montrer tout à la fois après le code est terminé.
Vous pouvez utiliser le setTimeout ou setInterval méthodes. Exemple:
OriginalL'auteur
Je les encourage à se débarrasser de la boucle et d'utiliser setTimeout:
OriginalL'auteur ggreiner
J'ai le sentiment que vous préférez ne pas commencer la prochaine itération de boucle jusqu'à ce que le géocodage de recherche est vraiment complet. Donc, le mot clé est "rappel":
au lieu de la
for...
, ne le ci-dessous. Je sais que cela peut ne pas être quelque chose que vous êtes habitué, mais s'il vous plaît essayer de le saisir (il devrait fonctionner).Oui, je voudrais éviter parallèle des appels ainsi que le ralentissement de la boucle. Il semble y aucun moyen de faire de l'api google pour agir de façon synchrone, donc j'ai de la pile tout en leur succès les fonctions. Je vais essayer de comprendre ton code...
le ci-dessus élimine parallèle des appels; de pause entre les appels, faire ceci:
if(counter < 20) { window.setTimeout(function(){ dogeo(geoCallback); } }, 2000);
OriginalL'auteur