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

TypeScript Discussion :

Comment r�cup�rer mon attribut


Sujet :

TypeScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �prouv�

    Profil pro
    Inscrit en
    Ao�t 2008
    Messages
    1 222
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 1 222
    Par d�faut Comment r�cup�rer mon attribut
    Bonsoir, j'essaye de r�cup�rer une donn�e d'une classe typescript, mais j'ai comme r�sultat indefined

    voici le bout de code:

    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
     
    /// <reference path='../typings/restify.d.ts' />
    import * as restify from 'restify';
     
    import {PDO} from '../PDO'
     
     
    class User{
     
        public data:any;
     
        public findUser()
        {
        let pdo = new PDO().getPdo();
     
        var qb = pdo.query("SELECT * from utilisateur where id = 1", function(err,result){
     
            if (err) throw err;
               this.data = result.rows[0];
               console.log(this.data); // anonymous { id: 1, email: '[email protected]' }
            });
     
        }
        public getUser(){
            console.log(this.data);
        }
     
     
    }
     
     
    var user = new User();
    user.findUser(); 
    user.getUser();//undefined

    ma m�thode getUser() me donne undefined, alors que dans la m�thode findUser(),
    la console.log(this.data) me donne un r�sultat?
    comment faire pour enregistrer ma donn�e dans l'attirbut data qui est public ?
    merci de vos r�ponses

  2. #2
    R�dacteur/Mod�rateur

    Avatar de yahiko
    Homme Profil pro
    D�veloppeur
    Inscrit en
    Juillet 2013
    Messages
    1 424
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 424
    Billets dans le blog
    43
    Par d�faut
    Ton programme est probl�matique dans la mesure o� il n'est pas d�terministe. Son comportement d�pend de la plateforme et des al�as de son environnement. Ta gestion de l'asynchrone n'est pas convenable.

    L'attribut data de ta classe User n'est d�fini que si ta requ�te SQL, en supposant qu'elle fonctionne, s'est termin�e. Ce qui n'est pas garanti au moment de l'appel � getUser(). Et dans ton exemple, peu de chance pour que cela soit le cas.

    Pour rem�dier � cela, il faudrait passer par le mod�le observateur (observer pattern) et les architectures du style MVVM.

    Et m�me si la requ�te SQL �tait termin�e avant l'appel � getUser(), l'attribut data ne serait pas initialis� correctement puisque ton this dans ta fonction anonyme ne correspond pas au this de l'instance de la classe (user) mais � celui de ta fonction anonyme. Utilise plut�t la notation fl�ch�e =>.
    Tutoriels et FAQ TypeScript

  3. #3
    Membre �prouv�

    Profil pro
    Inscrit en
    Ao�t 2008
    Messages
    1 222
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 1 222
    Par d�faut
    Je te remercie beaucoup de ta r�ponse, je suis encore trop habitu� au programme ligne par ligne proc�dural ...
    c'est pas encore claire chez moi ...

    j'ai tenter ceci:

    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
    35
    36
    37
    38
    39
    40
    41
     
    /// <reference path='../typings/restify.d.ts' />
    import * as restify from 'restify';
     
    import {PDO} from '../PDO'
     
     
    class User{
     
        public data:string;
     
        public findUser()
        {
     
     
     
            this.data = function(result)
            {
     
                let pdo = new PDO().getPdo();
                let qb =  pdo.query("SELECT * from utilisateur where id = 1", function(err,result){
     
     
                if (err) throw err;
                    return  result.rows[0];
                });
            }
     
        }
     
        public getUser(function(this.data)){
            console.log(this.data);
        }
     
     
    }
     
     
    var user = new User();
    user.findUser(); 
    user.getUser();//undefined

    ici le compilateur tsc me g�n�re une erreur

    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
     
     
      User.prototype.getUser = ;
                                 ^
    SyntaxError: Unexpected token ;
        at Object.exports.runInThisContext (vm.js:76:16)
        at Module._compile (module.js:513:28)
        at Object.Module._extensions..js (module.js:550:10)
        at Module.load (module.js:458:32)
        at tryModuleLoad (module.js:417:12)
        at Function.Module._load (module.js:409:3)
        at Module.runMain (module.js:575:10)
        at run (bootstrap_node.js:352:7)
        at startup (bootstrap_node.js:144:9)
        at bootstrap_node.js:467:3
    l

    je ne sais pas encore bien construire correctement ma classe avec des callbacks.

    quant tu parles de "=>" c'est la d�claration de variable qui est une fonction ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    function add(x: number, y: number): number {
        return x + y;
    }
     
    let myAdd = function(x: number, y: number): number { return x+y; };
    si j'essaye d'adapter mon attribut ressemblerais � �a ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class User{
    //sql = SELECT * from utilisateur where id = 1
    public data_sql = function(sql,pdo,result): string { return getUser(result) }
     
    public getUser(result){
       return result;
    }

  4. #4
    Membre �prouv�

    Profil pro
    Inscrit en
    Ao�t 2008
    Messages
    1 222
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 1 222
    Par d�faut
    j'ai trouv� un autre exemple pour le "=>"

    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
     
    class MarchePas {
        private email = "[email protected]";
     
        public  getEmail() { 
            console.log(this.email);
        }
    }
     
    var erreur = new MarchePas();
    erreur.getEmail();
     
     
     
    class  User{
        private email = "[email protected]";
     
        public getEmail = () => {
            console.log(this.email);
        }
    }
     
     
    var email = new User();
    email.getEmail();
    quel est la diff�rence entre les ces classes ??
    c'est juste la syntaxe ?

  5. #5
    R�dacteur/Mod�rateur

    Avatar de yahiko
    Homme Profil pro
    D�veloppeur
    Inscrit en
    Juillet 2013
    Messages
    1 424
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 424
    Billets dans le blog
    43
    Par d�faut
    Citation Envoy� par yahiko Voir le message
    Utilise plut�t la notation fl�ch�e =>.
    Cf. Fonction anonyme fl�ch�e

    Citation Envoy� par keokaz Voir le message
    quel est la diff�rence entre les ces classes ??
    c'est juste la syntaxe ?
    Concernant la diff�rence de syntaxe :

    Dans la classe MarchePas, la m�thode getEmail() sera transpil�e en prototype (ie. commune � toutes les instances de la classe, non dupliqu�e)

    Dans la classe User, getEmail n'est pas une m�thode, mais un attribut du type fonction. Il ne sera pas transpil� en prototype et une instance de la classe User pourra avoir une d�finition de fonction diff�rente d'une autre instance pour cet attribut.

    A cause des particularit�s de la variable this en JavaScript/TypeScript, on pourra parfois pr�f�rer d�finir une m�thode de classe comme attribut (et donc dupliqu� pour chaque instance de classe) si on utilise this au sein de la m�thode, pour �viter les probl�matiques li� � l'objet appelant la m�thode (via callback par exemple).

    Par exemple, si on ajoute ces deux instructions ci-dessous � la fin de ton code, on peut constater la probl�matique de l'utilisation du mot-cl� this dans les classes.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    setTimeout(erreur.getEmail, 1000); // undefined
    setTimeout(email.getEmail, 2000); // [email protected]
    Tutoriels et FAQ TypeScript

  6. #6
    Membre �prouv�

    Profil pro
    Inscrit en
    Ao�t 2008
    Messages
    1 222
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 1 222
    Par d�faut
    merci pour cette �claircissement , il m'a fallut quelque heures pour comprendre l'histoire des variable prototypes qui se partage (je m'en sert jamais sur javascript ....)

    maintenant revenons � mon but de trouver un email dans la base de donn�e, j'ai donc essay� ceci:

    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
     
        /// <reference path='../typings/restify.d.ts' />
    import {PDO} from '../PDO'/// <reference path='../typings/restify.d.ts' />
     
    class  User{
     
        private email;
     
        public getEmail() {
                this.email = () => {
                let pdo = new PDO().getPdo();
                let qb =  pdo.query("SELECT * from utilisateur where id = 1", function(err,result){
     
                        if (err) {
                            throw err
                        }else{
                            var result = result.rows[0];
                            console.log(result);
                    }
                });
                console.log("requete fini");
            }
     
        }
     
     
    }
     
     
    var email = new User();
    email.getEmail();
    je lance le script mais j'ai aucun message m�me pas une erreur ...

    le script en js compil� donne:

    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
     
    "use strict";
    /// <reference path='../typings/restify.d.ts' />
    var PDO_1 = require('../PDO'); /// <reference path='../typings/restify.d.ts' />
    var User = (function () {
        function User() {
        }
        User.prototype.getEmail = function () {
            this.email = function () {
                var pdo = new PDO_1.PDO().getPdo();
                var qb = pdo.query("SELECT * from utilisateur where id = 1", function (err, result) {
                    if (err) {
                        throw err;
                    }
                    else {
                        var result = result.rows[0];
                        console.log(result);
                    }
                });
                console.log(qb);
            };
        };
        return User;
    }());
    var email = new User();
    email.getEmail();

Discussions similaires

  1. R�ponses: 2
    Dernier message: 25/08/2008, 10h54
  2. Comment r�cup�rer mon compte admin ?
    Par Papy_CPC1512 dans le forum Windows Vista
    R�ponses: 9
    Dernier message: 02/07/2008, 16h16
  3. Comment r�cup�rer mon texte ?
    Par remixtech dans le forum D�buter
    R�ponses: 3
    Dernier message: 05/06/2008, 10h28
  4. Comment r�cup�rer mon SELECT en m�moire ?
    Par Invit� dans le forum Bases de donn�es
    R�ponses: 3
    Dernier message: 14/03/2006, 05h09
  5. [VB.Net] Comment r�cup�rer les Attributs LDAP ?
    Par le Daoud dans le forum VB.NET
    R�ponses: 6
    Dernier message: 03/03/2006, 11h45

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