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 :

retour fonctions anonymes


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 12
    Points : 9
    Points
    9
    Par défaut retour fonctions anonymes
    Bonjour à tous,

    voila mon problème est sans doute simple à résoudre mais j'ai cherché partout, tutos sur les closures, les fonctions anonymes ... et je n'ai rien trouvé qui correspondait.

    En fait j'ai un objet FileReader et donc un code du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var fr = new FileReader();
    fr.readAsText(input.files[0]);
    fr.onload = function() {
    alert(fr.result);
    };
    ...
    Ce code est placé dans une de mes fonctions et j'aimerais qu'elle retourne la valeur fr.result, mais je ne vois pas comment la récupérer :/

    Merci d'avance.

  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
    Bonjour , en faisant un simple return ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var fr = new FileReader();
    fr.readAsText(input.files[0]);
    fr.onload = function() {
    return fr.result;
    };
    ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Merci pour ta réponse mais en fait c'est plus compliqué

    Pour être plus clair tu as :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function readCSV(input) {
    var res;
    .....
    .....
    .....
    fr.onload = function() {
    	return fr.result;
    };
     
    return res; //je veux que res contienne le résultat de fr.result  
    }

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

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function readCSV(input) {
    var res;
    .....
    .....
    .....
    fr.onload = function() {
        return fr.result;
    };
     
    res = fr.load();
    return res; //je veux que res contienne le résultat de fr.result  
    }

  5. #5
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    FileReader travail de manière asynchrone, l'évènement onload est
    levé quand il a fini de charger le fichier. Je doute que l'on puisse
    faire une attente active (mais je me trompe peut-être).

    Je te proposerai plutôt de passer une callback à ta fonction qui
    est appelée au onload. qqch dans ce goût là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function readCSV(input, onloadCallback) {
      var res;
      .....
      fr.onload = function() {
    	onloadCallback(fr.result);
      };
    }
    et tu appelles ça dans ce goût là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    readCSV(input, function(res) { 
      alert(res);
    });

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Au-delà du FileReader, tous les événements onload, par principe, sont asynchrones vu que leur fonction est d'être lancés quand la ressource est disponible. Si la ressource est disponible immédiatement, le onload n'a plus aucune utilité ni aucun sens !
    D'ailleurs, onload existe pour un objet xhr (mais pas cross browser à ma connaissance).
    Autre curiosité, un script présent dans la page se charge de façon synchrone (blocage du chargement du reste de la page), en revanche, un script appelé dynamiquement se charge de façon asynchrone et possède un événement onload !
    Du coup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript" src="tres_gros_script"></script>
    bloquera la page tant que le script n'aura pas été chargé et évalué, mais pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <script type="text/javascript">
    var mon_gros_script = document.createElement('script');
    mon_gros_script.type="text/javascript";
    mon_gros_script.src = "tres_gros_script";
    mon_gros_script.onload = function(){alert('Chargé !');};
    document.getElementsByTagName('head')[0].appendChild(mon_gros_script);
    </script>

Discussions similaires

  1. [JS] Fonction anonyme et retour de variable ?
    Par lounislounis dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/07/2010, 00h23
  2. Recuperer retour fonction PL/SQL
    Par pegase06 dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 14/02/2007, 09h25
  3. fsolve & paramètres de la fonction anonyme
    Par Mathusalem dans le forum MATLAB
    Réponses: 1
    Dernier message: 05/07/2006, 10h04
  4. Retour fonction
    Par Mookie dans le forum C++
    Réponses: 13
    Dernier message: 12/01/2005, 11h43
  5. Retour fonction
    Par Heaven dans le forum C
    Réponses: 4
    Dernier message: 09/01/2004, 20h17

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