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 :

Passage et recupération de paramètre Closure


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 18
    Par défaut Passage et recupération de paramètre Closure
    Bonjour,

    J'ai un problème concernant deux fonctions dont une imbriqué, le résultat retourner est undefined et la valeur que je désire récuperer et stocké dans "Closure" avec le debugger de chrome.

    J'aimerais savoir comment accéder à cette valeur :
    Voici en "gros de chez gros mon code".

    fonction 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function modifier(){
    return(getres(id));
    }
    fonction 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function getres(id){
    this.id=id;
    db.transaction(function(tx){
    tx.executeSql("...",[],function (tx,resu) { return value; }, function (tx,error) { return 0; });
    });
    }
    J'ai donc ma value dans "closure" et l'appel de la fonction modifier() me retourne undefined.

    Merci d'avance.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Bonjour,
    pas tout bien compris MAIS ta fonction ne peut pas retourner autre chose que undefined attendu qu'elle ne reçoit pas de paramètre lui permettant d'identifier id.

    Le code que tu nous montres est à mon sens insuffisant pour cerner ton problème.

  3. #3
    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
    Billets dans le blog
    20
    Par défaut
    Je rajouterais qu'en plus, vu que ta fonction getres ne retourne rien,
    renverra toujours undefined :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function globale(fn){
        alert(fn());
    }
    function fn1(){
        var txt = 'Hello world !';
    }
    function fn2(){
        var txt = 'Hello world !';
        return txt;
    }
    globale(fn1);
    globale(fn2);
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    Bonjour,
    pas tout bien compris MAIS ta fonction ne peut pas retourner autre chose que undefined attendu qu'elle ne reçoit pas de paramètre lui permettant d'identifier id.

    Le code que tu nous montres est à mon sens insuffisant pour cerner ton problème.
    "id" pourrait très bien être global, par contre comme le dit bovino, "modifier" est censé retourner le résultat de "getres" mais "getres" ne retourne rien. (il n'y a pas de mot clé "return" dans la fonction ormis celui appartenant à une autre fonction imbriquée.)

    n'ayant pas assez d'éléments pour proposer une réponse, je tente au pif-o-mètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function getres(id){
    this.id=id;
    return db.transaction(function(tx){tx.executeSql("...",[],function (tx,resu) { return value; }, function (tx,error) { return 0; });});
    }
    ou alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function getres(id){
    this.id=id;
    db.transaction(function(tx){tx.executeSql("...",[],function (tx,resu) { return value; }, function (tx,error) { return 0; });});
    return this;}
    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function modifier(){
    return new getres(id);
    }

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Citation Envoyé par Willpower
    "id" pourrait très bien être global, par contre comme le dit bovino, "modifier" est censé retourner le résultat de "getres" mais "getres" ne retourne rien. (il n'y a pas de mot clé "return" dans la fonction ormis celui appartenant à une autre fonction imbriquée.)
    tu as tout à fait raison, je me suis simplement pris à penser que quelqu'un qui instancie un objet ne ferait pas l'erreur de passer en paramètre une variable globale à une fonction alors qu'il ne le fait pas sur la fonction qui la contient.

    Je dois reconnaître que Bovino à mis le doigt sur le pourquoi le plus légitime.

    Reflexion: Mais combien a-t-il de doigts?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 18
    Par défaut
    Bonjour,

    Merci pour vos réponses.

    Débutant je n'ai pas très bien compris ta réponse Bovino.

    Willpower j'avais pensé à faire cela mais ce qui m'amène ici est le "déroulement" de ma fonction.

    Je vais donc vous expliquer en détail:

    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
    27
    28
    29
    30
    31
    32
    33
    34
            function modifier(){
                var idselect = ; // je recupere l'id d'un select
    			console.log(idselect); // me retourne l'entier id
                db.transaction(function(tx) {
                        tx.executeSql("ma requete WHERE id=?", [idselect],
                        function(tx,resu){
    						// je rentre ici et donc ma requête s'execute convenablement
                            console.log(getres(idselect)); // la j'obtient undefined
                            },
                        function(tx,error)
                            {
                                return;
                            });
                    });
            }
     
     
    		        function getres(id){
                    this.id=id;
    				console.log(id); // me retourne l'entier id passé en paramètre et affecter à la fonction
                    db.transaction(function(tx) {
                        tx.executeSql("ma requete WHERE id=?", [id],
                        function(tx,resu){
                            // je construit un array à partir d'un SELECT
                            table = array2json(table); // je json l'array
                            console.log(table); // me retourne l'array en json
                            return table;
                        },
                        function(tx,error)
                            {
                                document.write("Impossible d'inserer ces donnees: "+error.message);
                            });
                    });
                    }
    Le problème est que les breakpoint afficher à tous mes logs, me montrent que l'appel de la fonction getres dans modifier me retourne undefined mais qu'ensuite je passe bien dans getres et le return est celui que j'attend.

    Les fonctions fonctionnent, le return de getres aussi, l'appel aussi.
    Je ne sais pas si je n'arrive pas à atteindre le return qui est fortement imbriqué via un getres(id) tout simple, si c'est une histoire de timeOut ou autre.

    Merci d'avance.

  7. #7
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    Citation Envoyé par anoninc Voir le message
    Bonjour,

    Merci pour vos réponses.

    Débutant je n'ai pas très bien compris ta réponse Bovino.

    Willpower j'avais pensé à faire cela mais ce qui m'amène ici est le "déroulement" de ma fonction.

    Je vais donc vous expliquer en détail:

    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
    27
    28
    29
    30
    31
    32
    33
    34
            function modifier(){
                var idselect = ; // je recupere l'id d'un select
    			console.log(idselect); // me retourne l'entier id
                db.transaction(function(tx) {
                        tx.executeSql("ma requete WHERE id=?", [idselect],
                        function(tx,resu){
    						// je rentre ici et donc ma requête s'execute convenablement
                            console.log(getres(idselect)); // la j'obtient undefined
                            },
                        function(tx,error)
                            {
                                return;
                            });
                    });
            }
     
     
    		        function getres(id){
                    this.id=id;
    				console.log(id); // me retourne l'entier id passé en paramètre et affecter à la fonction
                    db.transaction(function(tx) {
                        tx.executeSql("ma requete WHERE id=?", [id],
                        function(tx,resu){
                            // je construit un array à partir d'un SELECT
                            table = array2json(table); // je json l'array
                            console.log(table); // me retourne l'array en json
                            return table;
                        },
                        function(tx,error)
                            {
                                document.write("Impossible d'inserer ces donnees: "+error.message);
                            });
                    });
                    }
    Le problème est que les breakpoint afficher à tous mes logs, me montrent que l'appel de la fonction getres dans modifier me retourne undefined mais qu'ensuite je passe bien dans getres et le return est celui que j'attend.

    Les fonctions fonctionnent, le return de getres aussi, l'appel aussi.
    Je ne sais pas si je n'arrive pas à atteindre le return qui est fortement imbriqué via un getres(id) tout simple, si c'est une histoire de timeOut ou autre.

    Merci d'avance.

    Ta fonction "getres" ne renvoit toujours rien ....


    voila en résumé la fonction getres que tu nous donnes (sans le parametre de transaction qui est une longue fonction) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function getres(id){
    	this.id=id;
    	console.log(id); // me retourne l'entier id passé en paramètre et affecter à la fonction
    	db.transaction(param_sous_form_de_fonction);
    }

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

Discussions similaires

  1. [VB]Passage de Fonction en paramètre (d'une autre fonction)
    Par Australia dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 21/03/2006, 18h55
  2. [InputStream]Passage d'inputStream en paramètre...
    Par joseph_p dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 03/01/2006, 14h18
  3. Passage de tableau en paramètre...
    Par Doomi dans le forum C
    Réponses: 14
    Dernier message: 20/10/2005, 14h08
  4. [DLL] Passage d'objet en paramètre
    Par TitiFr dans le forum Langage
    Réponses: 4
    Dernier message: 20/08/2005, 23h18
  5. Réponses: 2
    Dernier message: 15/09/2004, 18h17

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