J'utilise google Geocode api pour boucler et géocoder une liste de 22 codes postaux et les stocker dans une base de données. Je voudrais afficher un message quand le géocodage est fait, cependant comme je dois utiliser setTimeout pour éviter de courir dans l'erreur "OVER_QUERY_LIMIT" à 11 postcodes, mon message apparaît beaucoup plus tôt que ce que le processus prend réellement. Comment puis-je résoudre ça?comment afficher le message après boucle est terminée lorsque setTimeout est impliqué?
JS
function geocodeAddress (postcode) {
geocoder.geocode({'address': postcode}, function(results, status) {
if (status === 'OK') {
var x,
resultsLength = results.length;
for(x = 0; x < resultsLength; x++) {
lat = results[x].geometry.location.lat().toFixed(8);
lng = results[x].geometry.location.lng().toFixed(8);
//send values to php file
sendLatLng(lat, lng);
}
}
else if (status == 'OVER_QUERY_LIMIT') {
//call function again after delay when error is encountered
setTimeout(function() {
geocodeAddress(postcode);
}, 200);
}
else {
console.log('Geocode was not successful: ' + status);
}
});
};
for (n = 0; n < pstcodeLength; n++) {
geocodeAddress(postcodes[n]);
//display message after loop is complete
if (n === pstcodeLength-1) {
console.log('geocoding is complete');
}
}
Vous dites que le «géocodage est complet» est en train de se produire trop tôt? Bien sûr, car les requêtes asynchrones sont toujours en cours lorsque la boucle est terminée. – epascarello
Oui je sais, est-il possible d'afficher après que tout est fait? – Sai
SO gardez la trace de chacun qui est complet et quand vous atteignez le maximum, affichez le message. – epascarello