fecth asynchrone retourne undefined

Pour toutes les discussions javascript, jQuery et autres frameworks
Répondre
paulDemoire
Messages : 2
Enregistré le : 05 mars 2023, 22:24

fecth asynchrone retourne undefined

Message par paulDemoire » 05 mars 2023, 22:35

hello,
je m'arrache les cheveux avec les promises...

j'ai construit un bout de code qui effectue un simple appel d'une url, l'url appelée me permet de savoir si je suis authentifié (valeur authorized)
Dans myurl.then je récupère bien ma valeur d'authorized mais dès que je veux l'utiliser plus loin dans le code, la valeur est à undefined.... Je pense que je n'ai pas bien compris l'usage des promises mais pourtant il me semble avoir créé un code synchrone...

Comment puis-je utiliser le résultat d'un promise dans la suite du code ?

const myurl = fetch(url, {
method: 'POST',
body: qs.stringify(data),
headers: headers
})
.then((response) => response.text())
.then((body) => {
var json_result = JSON.parse(body);
return json_result.authorized;
});


const printUrl = () => {
myurl.then((a) => {
console.log(a);
// retourne true !!!
cnx = a;
return a;
});
};

var test = printUrl();
console.log('cnx : ' + cnx);
// retourne undefined !!!

Avatar du membre
webmaster
Administrateur du site
Messages : 563
Enregistré le : 28 févr. 2017, 15:19

Re: fecth asynchrone retourne undefined

Message par webmaster » 06 mars 2023, 09:18

Bonjour

Il faut enchainer les traitements dans les then pour s'assurer que la promise a bien été traitée

Le retour undefined montre que le traitement s'exécute trop tot
TJS : 25 ans et mon livre Tout JavaScript chez Dunod
https://www.toutjavascript.com/livre/index.php

paulDemoire
Messages : 2
Enregistré le : 05 mars 2023, 22:24

Re: fecth asynchrone retourne undefined

Message par paulDemoire » 06 mars 2023, 10:43

Je cherche surtout à retourner la valeur issue d'un then pour pouvoir l'exploiter plus tard dans le code.
Si mon code vient à être mis dans une méthode d'une classe, comment je peux récupérer cette valeur et garantir la synchro des tâches ?

class MyClass {
...

auth {
blah blah
.then(...)

}

module.exports = MyClass;

-----

let my = new MyClass('https://www.myurl.com'');

var cnx = my.auth();
console.log(cnx);
// cnx = undefined !!!

Avatar du membre
webmaster
Administrateur du site
Messages : 563
Enregistré le : 28 févr. 2017, 15:19

Re: fecth asynchrone retourne undefined

Message par webmaster » 06 mars 2023, 11:49

Je pense qu'il faut que la class hérite du type promise pour que toute la chaine de code soit "thenable"

Code : Tout sélectionner

var cnx = my.auth().then() => {
  console.log(cnx);
}
A vérifier comment on passe les données car je n'ai pas eu affaire à un tel besoin
TJS : 25 ans et mon livre Tout JavaScript chez Dunod
https://www.toutjavascript.com/livre/index.php

Répondre