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 :

Récupérer le résultat d'une promesse


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut Récupérer le résultat d'une promesse
    Bonjour,

    Après quelques tentatives en essayant de m'initier aux promesses, je n'arrive pas à récupérer le résultat d'un petit script d'exemple que je me suis créé ici :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      testPromise = new Promise((resolve, reject) => {
        setTimeout(() => {
          return "hello";
        }, 500);
        resolve("ok");
        reject("ko");
      });
     
     
      test.then((res) => console.log(res));
    Je m'attendais à récupérer la valeur "Hello" en console, mais je n'ai rien du tout...Quelqu'un peut-il m'expliquer mon errer ?

    Merci

  2. #2
    Membre actif Avatar de Gobble
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Octobre 2014
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 100
    Points : 222
    Points
    222
    Par défaut
    Hello,

    Tu dois récupérer le retour du resolve dans la méthode then pas de return dans une promesse. Soit elle se "resolve" après un traitement réussi, soit elle éjoue après un traitement foiré et "reject".

    C'est le callback de la méthode then qui récupère le résultat du resolve et le catch qui récupère le résultat du reject pour afficher le contenu de l'erreur par exemple.

    Après dans ton exemple tu rentre forcément dans le resolve('ok') car dans la call stack, le setTimeOut, qui est asynchrone, s'execute tjr après le corps de sa fonction mère, (même si ce timeout était défini sur 0) (je l'ai donc mis en commentaire)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var testPromise = new Promise((resolve, reject) => {
        setTimeout(() => {
     
            resolve("hello");
        }, 500);
     
      //  reject("ko");
    });
     
    testPromise.then( value =>{
     
        console.log(value);
        // output "hello";
    }).catch(error => console.log(error));

  3. #3
    Membre averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut
    Ah merci beaucoup, je croyais que le resolve faisait une action, une fois que la promesse avait fait correctement son travail, un peu dans ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    new Promise((resolve, reject) => {
        // Action de la promesse
        // si tout va bien je resolve()
        // sinon je reject()
    });
    Merci encore !

  4. #4
    Membre actif Avatar de Gobble
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Octobre 2014
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 100
    Points : 222
    Points
    222
    Par défaut
    C'est tout à fait ça, le setTimeOut te sert a simuler le temps d'attente du résultat d'une promesse que tu pourrais faire dans le monde réel, par exemple appeler une API, fetch une image etc... et attendre la réponse, ensuite, en fonction du résultat tu résous explicitement la promesse avec resolve ou reject.


    On peut faire la même chose qu'une promesse en utilisant une fonction de rappel, sauf que c'est moins lisible (voir callback hell)

  5. #5
    Membre averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut
    Merci avec bcp de retard

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/10/2005, 11h53
  2. récupérer le résultat d'une requête sql dans un edit
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/07/2005, 14h07
  3. Réponses: 7
    Dernier message: 30/06/2005, 10h06
  4. récupérer le résultat d'une requete
    Par sheira dans le forum ASP
    Réponses: 3
    Dernier message: 03/12/2004, 11h04
  5. [C#] Récupérer le résultat d'une procédure stockée
    Par fabrice1596 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/10/2004, 13h45

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