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 :

[JS] Fonction anonyme et retour de variable ?


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Points : 20
    Points
    20
    Par défaut [JS] Fonction anonyme et retour de variable ?
    Bonjour à tous,

    Je développe une petite application web qui utilise Google map.
    Je cherche à créer une fonction qui me renvoit la hauteur en fonction de coordonnées. Le point sur lequel je bloque est générique; aucune connaissance de l'API n'est nécessaire pour y répondre. Je précise aussi que je débute en javascript.

    un bout de code vaut mieux que de long discours (je n'ai laissé que le code nécessaire):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function getAltitude(latitude, longitude){
    	var altitude=0;
     
    	elevator.getElevationForLocations({'locations': lesCoor}, function(resultAlt, status){
    		if (status == google.maps.ElevationStatus.OK){
    			// Retrieve the first result
    			altitude=resultAlt[0].elevation;		
    			alert(altitude);
    		}
    	});
    	return altitude;
    }

    Le problème ici, classique je pense, est que je souhaite avoir comme valeur de retour de la fonction, la valeur affichée dans l'alerte et non 0 comme instanciée au début de la fonction. J'ai cherché un peu partout et je n'ai pas trouvé comment faire ça; si l'un d'entre vous sait?

    Voilà, merci à tous.

  2. #2
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    heu et en faisant ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function getAltitude(latitude, longitude){
    	var altitude= function(resultAlt, status){
    		if (status == google.maps.ElevationStatus.OK){
    			// Retrieve the first result
    			altitude=resultAlt[0].elevation;		
    			return altitude;
    		}
             }	
    	elevator.getElevationForLocations({'locations': lesCoor}, altitude);
    	return altitude;
    }
    ou alors je n'ai pas compris pourquoi tu passais une fonction en paramètre a elevator.getElevationForLocations
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Salut,

    Merci pour ta réponse. J'ai essayé ce que tu propose et la valeur de retour s'en trouve être la chaine de caractère "function(resultAlt, status){...}".

    La fonction est donnée quasiment comme telle dans la doc de l'api; ici, je cherche simplement à récupérer la valeur renvoyée par elevator.getElevationForLocations dans resultAlt[0].elevation, mais cela devrait revenir au même, je crois, que récupérer la valeur modifiée dans l'appel qui suit et d'avoir 5 en retour et non 0, nan ? En tout cas c'est ce sur quoi je bloque...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function exemple(val1, val2){
    	var retour=0;
    	function(){
    		retour=5;
    	}
    	return retour;
    }

    EDIT: je crois, comme on me le suggère sur un autre forum, qu'il s'agit d'un problème de synchronisation; je fouille la doc et je reviens.

  4. #4
    Membre actif Avatar de polkduran
    Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 155
    Points : 275
    Points
    275
    Par défaut
    en effet je crois que c'est parce que l'exécution de la fonction anonyme se fait en asynchrone, je pense que la fonction anonyme s'exécute quand la fonction 'getElevationForLocations' est finie,

    si tu veux faire différents traitements quand tu appelles ta fonction 'getAltitude' tu peux envoyer en troisième paramètre une fonction à exécuter quand 'getElevationForLocations' finit de s'exécuter,
    du genre :
    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
     
    function getAltitude(latitude, longitude,oncomplete){
    	var altitude=0;	
    	elevator.getElevationForLocations({'locations': lesCoor}, function(resultAlt, status){
    		if (status == google.maps.ElevationStatus.OK){
    			// Retrieve the first result
    			oncomplete(resultAlt);
    		}
    	});
    	return altitude;
    }
     
    //et tu l'appelles comme ça
    var completed = function(result){alert(result[0].elevation);};
    getAltitude(lat,long,completed);
    ça doit marcher

Discussions similaires

  1. [Google Maps] Extraire une locale variable dans une fonction anonyme
    Par 3logy dans le forum APIs Google
    Réponses: 4
    Dernier message: 17/12/2010, 12h02
  2. retour fonctions anonymes
    Par N3jidev dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/10/2010, 21h10
  3. Fonctions anonymes et passage de variables
    Par Killua69 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 23/07/2010, 12h16
  4. Fonction retour de variable par webservice
    Par Tigrou_Giyome dans le forum Services Web
    Réponses: 1
    Dernier message: 26/01/2007, 15h35
  5. retour de variable d'une fonction
    Par thunderblade dans le forum ASP
    Réponses: 4
    Dernier message: 28/04/2005, 13h27

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