Partage
  • Partager sur Facebook
  • Partager sur Twitter

Promise Firebase erreur lors du reject

reject ne retourne rien

Sujet résolu
    17 janvier 2023 à 17:00:35

    Bonjour à tous et merci d'avance pour votre aide.

    J'ai de la difficulté a bien comprendre le fonctionnement de Promise avec resolve et reject. J'apprend le fonctionnement de Firebase et du Javascript. J'ai une fonction qui me permet de m'enregistrer avec un email et un mot de passe.

       
     async DB_SIGNIN()
        {
            return new Promise((resolve, reject) => {
            signInWithEmailAndPassword(auth, this.email, this.mdp).then(() =>
                    {
                        resolve("OK");
                    })
                    .catch((error) =>
                    {
                        if (error.code == "auth/user-not-found")
                        {
                            reject("auth");
                        }
                    reject("NOK");
                });
            });
        }
    lett = awaitDB_SIGNIN();
    console.log(t);

    Quand l'adresse email et mot de passe sont bons, je recois du promise resolve "OK", mais quand il y a une erreur, je ne recois rien dans ma variable t et un message apparait dans la console  "Uncaught auth" avec auth provenant du reject.

    Je ne trouve pas la solution pour récupérer "auth" ou "NOK" ou une donnée provenant du reject.

    Est-ce que quelqu'un aurait une solution a me proposer ?

    Merci

    -
    Edité par GrégoryClément1 17 janvier 2023 à 17:34:11

    • Partager sur Facebook
    • Partager sur Twitter
      17 janvier 2023 à 17:07:14 - Message modéré pour le motif suivant : La demande de l'équipe de modération a été honorée


      Pas d'aide concernant le code par MP, le forum est là pour ça :)

        17 janvier 2023 à 17:43:46

        Bonjour, tu dois capturer ton erreur avec un block try...catch:

        let t = null;
        try {
          t = await DB_SIGNIN();
          console.log(t);
        } catch(error) {
          console.log(error); // "auth" où "NOK"
        }
        
        // ... suite de ton code ...
        

        Si tu captures pas l'erreur, elle se déclenche d'où le message dans la console.

        -
        Edité par SamuelGaborieau3 17 janvier 2023 à 17:45:01

        • Partager sur Facebook
        • Partager sur Twitter

        suggestion de présentation.

          17 janvier 2023 à 17:58:35

          Bonjour Samuel,

          Tu as raison, ta solution fonctionne ! Merci.

          Est-ce qu'il y a une possibilité de mettre le try catch directement dans la fonction DB_SIGNIN() ?

          Merci pour ton aide.

          • Partager sur Facebook
          • Partager sur Twitter
            17 janvier 2023 à 18:26:23

            La fonction DB_SIGNIN() capture déjà l'erreur (avec le .then .catch) et elle renvoi l'erreur.

            Comme ta fonction DB_SIGNIN est défini avec le mot clés async tu peux utiliser await dans ta fonction,

            donc tu peux l'écrire sous cette forme-là:

            async DB_SIGNIN() {
            
                try {
                    await signInWithEmailAndPassword(auth, this.email, this.mdp);
                    
                    return "success"
                } catch(error) {
                    if (error.code == "auth/user-not-found") {
                        return "auth";
                    }
                    return "NOK";
                }
            }

            C'est plus simple à lire sous cette forme-là mais le try/catch dans la fonction DB_SIGNIN() remplace pas celui à l'appel de la fonction.

            Tu dois toujours appelé ta fonction comme cela:

            let t = null;
            try {
              t = await DB_SIGNIN();
              console.log(t);
            } catch(error) {
              console.log(error); // "auth" où "NOK"
            }
             
            // ... suite de ton code ...

            Pourquoi tu voulais déplacer le try/catch dans la fonction DB_SIGNIN() ?



            • Partager sur Facebook
            • Partager sur Twitter

            suggestion de présentation.

              18 janvier 2023 à 12:35:55

              Bonjour Samuel,

              Tu as résolut mon problème. En utilisant tes corrections:

              async DB_SIGNIN() {
               
                  try {
                      await signInWithEmailAndPassword(auth, this.email, this.mdp);
                       
                      return "success"
                  } catch(error) {
                      if (error.code == "auth/user-not-found") {
                          return "auth";
                      }
                      return "NOK";
                  }
              }

              J'obtient bien le résultat attendu.

              Je n'ai plus besoin de mettre :

              let t = null;
              try {
                t = await DB_SIGNIN();
                console.log(t);
              } catch(error) {
                console.log(error); // "auth" où "NOK"
              }

              Je voulais ajouter les try catch dans la fonction DB_SIGNIN() pour n'avoir que l'appel de la la fonction avec un résultat.

              Le tout premier problème que j'avais rencontré, était que le code n'attendait pas une réponse pour continuer. Promise et await avait résolut le problème. Après j'ai rencontré le problème de cette discussion de ne plus arriver à récupérer le catch.


              Avec le code test suivant, je valide bien que la séquence est exécutée en ordre et j'obtient bien les erreurs dans la variable t:

              let database = new DB("gpclement@gmail.com", "123456"); 
              let t = "";
              console.log(1);
              t = await database.DB_SIGNIN();
              console.log(2);
              console.log(t);
              console.log(3);
              
              database = new DB("gpcGlement@gmail.com", "123456");
              console.log(1);
              t = await database.DB_SIGNIN();
              console.log(2);
              console.log(t);
              console.log(3);


              Je vais revoir tout mon code pour faire les corrections appropriées.


              Merci pour ton aide



              • Partager sur Facebook
              • Partager sur Twitter

              Promise Firebase erreur lors du reject

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown