Google géocodant plusieurs adresses dans une boucle avec javascript, comment puis-je savoir quand tout est fait?
J'ai un formulaire qui vous demande une liste des endroits (pas beaucoup, normalement, à seulement 3 ou 4, mais ce nombre est dynamique). Lorsque le formulaire est soumis, je dois analyser les données, l'utilisation de géocodage de Google pour obtenir les emplacements, puis tracez une ligne reliant les points dans l'ordre. J'ai de l'analyse de travail, mais je suis bloqué sur le géocodage partie, principalement en raison de la nature asynchrone. Assumer mon adresse chaînes de caractères sont stockées dans le tableau "adresses", c'est à quel point j'ai obtenu:
function someFunction(addresses) {
var coords = [];
for(var i = 0; i < addresses.length; i++) {
currAddress = addresses[i];
var geocoder = new google.maps.Geocoder();
if (geocoder) {
geocoder.geocode({'address':currAddress}, function (results, status)
if (status == google.maps.GeocoderStatus.OK) {
coords.push(results[0].geometry.location);
}
else {
throw('No results found: ' + status);
}
});
}
}
//Initially I tried to work with the data here, but it wasn't all present yet.
}
Le dessin de la ligne est assez facile, je l'ai fait avant lorsque les utilisateurs de l'géographiques lat/lng coordonnées. Mon problème est, car les coordonnées sont seulement ajoutés dans le rappel, comment puis-je savoir quand il est fait? Je ne peux pas juste dump que dans une fonction et mettre dans le rappel parce que j'ai besoin d'attendre jusqu'à ce que toutes les coordonnées ont été traitées.
J'ai aussi lu au sujet de quelqu'un qui a eu des problèmes avec des résultats pas revenir dans l'ordre, mais je ne comprenais pas fourni de réponse. Si quelqu'un a une réponse qui peut m'aider avec mon problème spécifique et s'assurer que les résultats de revenir dans l'ordre, je vous serais très reconnaissant.
NB: j'ai la main-bombardé que le code, donc il peut y avoir des fautes de frappe. Mon code donc loin des "œuvres", je ne sais pas qui à se déplacer à partir de ce que j'ai à faire quelque chose une fois que toutes les adresses sont traitées. Aussi, c'est actuellement développé comme une application interne pour les tests. Une fois le test terminé, il se conformer pleinement avec Google TOS. Cela signifie que je n'ai pas de page, je peux créer un lien. L'ensemble de l'application est également plus de 2 000 lignes de code et qui contient des information exclusive de la société en ce moment, qui finiront par disparaître, de sorte que le collage de l'ensemble de la chose ou de l'envoyer n'est pas envisageable. J'espère que cela ne posera pas trop de problème.
source d'informationauteur user985219
Vous devez vous connecter pour publier un commentaire.
Utilisation de la fonction de Rappel est incroyable
Vous pouvez vérifier si tous les appels ont été finis en comparant le nombre de résultats pour le nombre d'adresses:
C'est assez vieux, mais il y a un problème de fermeture dans les réponses données donc résultat final a la même lat,long pour toutes les adresses.
Il est préférable de faire une boucle par toutes les adresses à l'aide de adresses.forEach de sorte que chaque géocodées adresse est contenue et cela devrait fonctionner correctement assurés par les navigateurs modernes. Autrement, vous devez définir un à l'extérieur de la fonction de s'attaquer à la javascript tristement célèbre boucle de problème. Voici forEach solution pour un tableau d'adresses: