IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Attendre la réponse(asynchrone)


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 25
    Par défaut Attendre la réponse(asynchrone)
    Bonjour,

    J'ai quelques soucis sur l'asynchrone ><. J'ai lu ça qui répondait une partie de ma réponse mais je souhaite enregistrer plusieurs valeurs sur un tableau.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var getBoutique = JSON.parse(window.localStorage.getItem('infoBout'));
    	var tri = new Array();
    	for(var j = 1; j<taille; j++){
    		where = getBoutique[j].adresse+", "+getBoutique[j].ville;
    		boutiqueProche(lat, lon,where, function(distanceO){ 
    			tri.push(distanceO);
    			});
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    function boutiqueProche(cLat, cLong,where, callback){
    	var geocoder= new google.maps.Geocoder();
    	var currentPosition = new google.maps.LatLng(cLat, cLong); // On récupère nos info
    	var recup = getBoutique.length;
    	var distance;
    	geocoder.geocode({ 'address': where}, function(results, status) {
       		if (status == google.maps.GeocoderStatus.OK) {
     
    			var laBoutique = new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng());
    			distance = google.maps.geometry.spherical.computeDistanceBetween(currentPosition, laBoutique);
    			recup=distance/1000;
    			callback(recup);
     
       		}	
       		else{
       			if( status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT){
       				setTimeout( function(){
            			boutiqueProche(cLat, cLong, where, callback); // rappel fonction avec meme param
           			 }, 200);    			
       			}
       				else {	/*Faire quelque chose */ }
       		}
     
    	});
    }
    Dans mon callback, j'enregistre bien mes valeurs dans le tableau tri[] =) mais le seul soucis est qu'il est asynchrone (Le geocoder prend trop de temps à répondre)! Donc lorsque je souhaite réutiliser mes valeurs en dehors (après la boucle for), j'ai mon tableau UNDEFINED car le geocoder prend du temps a répondre. Je voudrai savoir s'il existe une fonction qui puisse rendre le geocoder synchrone ou j'attend que le tableau se remplit pour pouvoir utiliser le tableau mais je ne vois pas comment faire ><

    Merci d'avance de votre aide, pour savoir comment résoudre mon problème ><

  2. #2
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    il n'y a aucune notion de temps de loop dans la prog asynchrone

    tu fais une requête qui envoie une demande au serveur et place une callback pour traiter la réponse.

    celle-ci lorsque les donné arrive les traite et déclenche un événement

    un handler sur cet événement réagit et manipule ton interface
    les changements induit vont engendrer des événements qui seront capté par d'autre handlers et agir à leur tour

    il n'y a jamais de loop ou de timeout pour déclancher une action qui manipule des donnée qu'on n'a pas reçu

    A+JYT

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 25
    Par défaut
    Merci de ta réponse!

    Donc il n'y a aucun moyen que je puisse traiter les données une fois le tableau remplit ?

    J'ai lu sur internet qu'il y avait un moyen mais je ne vois pas comment l'utiliser
    Il faut utiliser le JQUERY.Deferred() et le deferred.promise() (http://api.jquery.com/promise/) Si tu as une idée comment l'utiliser, je suis preneur =)

  4. #4
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    tu dit je veux executer ma fonction lorsque le tableau est rempli

    et tu fait j'exécute ma fonction au bout de X minute et ça plante parce que le tableau n'est pas rempli

    ma réponse est :
    execute ta fonction lorsque le tableau est rempli

    donc utilise les événements
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (window.addEventListener) {
      window.addEventListener('monTableauEstRempli', mafonction, false);
    }
    else if (window.attachEvent) {
      window.attachEvent('monTableauEstRempli', mafonction );
    }
    A+JYT

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 25
    Par défaut
    Merci je comprend beaucoup mieux!
    Je ne maîtrise pas encore assez bien javascript

    Comment je peux dire que mon tableau est remplie et appelé le
    window.attachEvent('monTableauEstRempli', mafonction ); ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if(tri.length == 29)
    {
      if (window.addEventListener) {
      window.addEventListener('monTableauEstRempli', mafonction, false);
      }
      else if (window.attachEvent) {
      window.attachEvent('monTableauEstRempli', mafonction );
      }
    }
    Dois je le lancer comme ça ? C'est la première fois que je vois qu'on peut mettre un addEventListener avec autre que click ou onclick! Mon parcours sera long pour le javascript xD

  6. #6
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    dans ton callback ajax lorsque le tableau est chargé tu créé un nouvel événement
    https://developer.mozilla.org/en-US/...PI/CustomEvent
    http://davidwalsh.name/customevent

    A+JYT

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Attendre la réponse d'une boite de dialogue ??
    Par Ben_Le_Cool dans le forum Delphi
    Réponses: 16
    Dernier message: 15/12/2006, 20h41
  2. [JDialog] attendre une réponse
    Par RR instinct dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 28/11/2006, 08h34
  3. Attendre une réponse du périphérique USB
    Par Arnaud Malabeux dans le forum C++
    Réponses: 6
    Dernier message: 17/06/2006, 22h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo