Page 1 sur 1

fecth asynchrone retourne undefined

Posté : 05 mars 2023, 22:35
par paulDemoire
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 !!!

Re: fecth asynchrone retourne undefined

Posté : 06 mars 2023, 09:18
par webmaster
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

Re: fecth asynchrone retourne undefined

Posté : 06 mars 2023, 10:43
par paulDemoire
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 !!!

Re: fecth asynchrone retourne undefined

Posté : 06 mars 2023, 11:49
par webmaster
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