J'ai eu le même problème plus tôt, mais ma situation était un peu différente dans le front-end. Je vais quand même partager mon scénario, peut-être que quelqu'un pourrait le trouver utile.
J'avais un appel api à /api/user/register
dans le frontend avec l'email, le mot de passe et le nom d'utilisateur comme corps de la requête. Lors de la soumission du formulaire (formulaire d'enregistrement), une fonction de gestion est appelée qui lance l'appel de récupération à /api/user/register
. J'ai utilisé le event.preventDefault()
dans la première ligne de cette fonction de gestion, toutes les autres lignes, comme la formation du corps de la requête ainsi que l'appel à la récupération, ont été écrites après l'option event.preventDefault()
. Cela a donné un pending promise
.
Mais lorsque je place le code de formation du corps de la demande au-dessus de la balise event.preventDefault()
il a rendu la vraie promesse. Comme ça :
event.preventDefault();
const data = {
'email': email,
'password': password
}
fetch(...)
...
au lieu de :
const data = {
'email': email,
'password': password
}
event.preventDefault();
fetch(...)
...
2 votes
@LoïcFaure-Lacroix , voir cet article : medium.com/@bluepnume/
0 votes
@LoïcFaure-Lacroix regarder à
getFirstUser
fonction0 votes
Alors, qu'en est-il ? C'est une fonction qui renvoie une promesse.
1 votes
@LoïcFaure-Lacroix donc vous voulez dire que même dans cet exemple nous devons utiliser then pour accéder à la promesse de données retournée dans la fonction getFirstUser ?
0 votes
Dans cet exemple oui, le seul autre moyen est d'utiliser la syntaxe ES7 "await" qui semble résoudre l'arrêt de l'exécution du contexte actuel pour attendre le résultat de la promesse. Si vous lisez l'article, vous le verrez. Mais comme ES7 n'est probablement supporté nulle part encore, oui. Le "then" est à peu près tout.
0 votes
@LoïcFaure-Lacroix Merci. Je connais await, mais comme je veux exécuter script sans babel, j'ai décidé d'utiliser Promises pour éviter l'enfer du callback. Mais il me semble que je suis proche de 'then hell' :D ... donc, il y a 0 moyen d'utiliser les promesses et de récupérer le résultat d'une promesse dans une variable et seulement ensuite continuer l'exécution ?
0 votes
Non, il n'y a aucun moyen, pour autant que je sache, car le code est exécuté dans un contexte différent.
0 votes
Techniquement, même avec
await
il ne suspend l'exécution qu'à l'intérieur d'une fonction (style co-routine). Vous ne pouvez pas attendre en dehors d'une fonction et la fonction dans laquelle vous attendez doit être marquée commeasync
et cette fonction renverra une promesse à la place. En fin de compte, vous ne pouvez pas échapper à l'utilisation de callbacks lorsque vous traitez du code asynchrone.0 votes
@slebetman async/await permet de récupérer la valeur de retour d'une promesse et de la placer dans la variable. C'est ainsi que l'on échappe au callback.
0 votes
@Src : Oui, mais seulement à l'intérieur de la fonction asynchrone. Si vous avez besoin de la valeur dans la boucle principale de votre programme, vous devez toujours passer un callback à la promesse que la fonction async renvoie.