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 :

Explication de code avec promise


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2022
    Messages : 22
    Points : 17
    Points
    17
    Par défaut Explication de code avec promise
    Bonjour,

    Je suis débutant en JS et je cherche à bien comprendre ce morceau de code.

    Quelqu'un peut me donner des explications ?

    Merci d'avance

    Nom : carbon.png
Affichages : 249
Taille : 177,9 Ko

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 433
    Points : 4 923
    Points
    4 923
    Par défaut
    Bonjour,

    getInfos(val) est une fonction asynchrone qui retourne une promesse, et cette dernière retourne un objet javascript val {id:"valeur id",price:"Prix produit",name:"Nom produit"} en cas de succès (ne pas oublier le cas d'erreur qui doit être géré par catch() ou reject()) en passant par la fonction de rappel resolve().

    Promise.all() est un outils de composition qui permet de mener des opérations asynchrones en parallèle.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2022
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Bonjour Toufik83

    Merci pour tes explications.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     .then((result) => {
    val.price = result.price;
    Pourquoi dans le .then ci dessus, les données ne sont pas inversées en result.price = val.price car val.price provient je pense de la requête à l'API et on veut attribuer cette valeurs à result.price ?

    Si on récupère déjà les valeurs que l'on veut, (val.price = result.price et val.name = result.name), à quoi sert : return resolve(val); ?

    La promise.all a-t-elle un lien avec la fonction getInfos et la promise de celle-ci ?

    Merci d'avance pour les éclaircissements.

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 433
    Points : 4 923
    Points
    4 923
    Par défaut
    Citation Envoyé par Pitord71 Voir le message
    .then((result) => {
    val.price = result.price;

    Pourquoi dans le .then ci dessus, les données ne sont pas innervées en result.price = val.price car val.price provient je pense de la requête à l'API et on veut attribuer cette valeurs à result.price ?
    Non c'est le contraire, le résultat de la requête de l'API est retourné par la variable result, et val c'est un paramètre de type objet {id:"valeur de l'id"} de la fonction getInfos(), et donc lorsque vous appelez par exemple getInfos({id:1}) vous aurez le résultat suivant {id:1,price:"Prix ...",name:"Nom..."}
    Citation Envoyé par Pitord71 Voir le message
    Si on récupère déjà les valeurs que l'on veut, (val.price = result.price et val.name = result.name), à quoi sert : return resolve(val); ?
    Une promesse est soit résolue avec resolve(), soit rejetée avec reject(), dans votre cas si tout se passe bien, on résout la promesse pour qu'elle retourne l'objet val.

    Citation Envoyé par Pitord71 Voir le message
    La promise.all a t'elle un lien avec la fonction getInfos et la promise de celle-ci ?
    Oui, promise.all attend que toutes les promesses soient terminée (résolues ou rejetées), elle est souvent utilisée pour gérer plusieurs promesses, voir cet exemple pour mieux comprendre.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2022
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup pour vos précisions.


    Reste 2 zones d'ombres :

    L'objet val va contenir val.price et val.name avec les données de ceux-ci ?


    Pourquoi utiliser Promise.all alors que dans ce cas (A priori), il y a qu'une promise a attendre et pas plusieurs ?


    Merci d'avance

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 433
    Points : 4 923
    Points
    4 923
    Par défaut
    Citation Envoyé par Pitord71 Voir le message
    L'objet val va contenir val.price et val.name avec les données de ceux-ci ?
    Oui, avec les valeurs correctes.

    Citation Envoyé par Pitord71 Voir le message
    Pourquoi utiliser Promise.all alors que dans ce cas (A priori), il y a qu'une promise a attendre et pas plusieurs ?
    Parce que la liste des produits Cart.products est un tableau contenant plusieurs produits, donc si tu as par exemple 3 produits avec les id (1,2,3) : [{id:1},{id:2},{id:3}], la fonction devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Promise.all([{id:1},{id:2},{id:3}].map(getInfos))
    Chaque produit est géré par une promesse, donc dans ce cas il y'a 3 promesses.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2022
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Un grand merci pour ces explications claires.

    Bonne soirée

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

Discussions similaires

  1. Besoin d'une explication sur un petit code
    Par Tamzoro dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 15/03/2018, 00h14
  2. Besoin d'une explication sur les pointeurs
    Par ToTo13 dans le forum C
    Réponses: 6
    Dernier message: 04/10/2008, 10h41
  3. Procédure besoin d'une explication
    Par me784 dans le forum VB.NET
    Réponses: 2
    Dernier message: 02/10/2008, 01h07
  4. Besoin d'une explication sur une "notation" de vista
    Par honeydew dans le forum Windows Vista
    Réponses: 5
    Dernier message: 22/08/2008, 17h35
  5. [GWT] Besoin d'une explication relation Ajax-GWT
    Par sboober dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 14/09/2007, 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