Async/Await : dévoiler le mystère des promesses
Lorsque l'on se lance dans le domaine de la fonctionnalité async/wait, on peut se heurter à une énigme intrigante . Il semble que les fonctions asynchrones renvoient toujours des objets Promise, ce qui entraîne une confusion lors d'une tentative de journalisation directe de la console.
Approfondissons ce phénomène et décryptons ses subtilités. Chaque fonction asynchrone est conforme au paradigme Promise, renvoyant un objet Promise qui encapsule le résultat de l'opération. L'instruction wait sert à suspendre l'exécution de la fonction jusqu'à ce que la promesse soit résolue ou rejetée.
Bien que l'on puisse supposer que wait déballe automatiquement la promesse, ce n'est pas le cas. L'utilisation de wait fait simplement attendre la fonction et renvoie ensuite une promesse qui se résout immédiatement. Cependant, la promesse doit être explicitement déballée à l'aide de wait ou .then() pour accéder au résultat réel.
Pour illustrer, considérons l'extrait de code suivant qui simule une requête asynchrone :
const getJSON = async () => { const request = () => new Promise((resolve, reject) => ( setTimeout(() => resolve({ foo: 'bar'}), 2000) )); const json = await request(); return json; };
Si l'on tente de consigner directement le résultat sur la console, le résultat sera une promesse :
console.log(getJSON()); // returns Promise
Cependant, en utilisant .then() pour déballez la promesse révèle l'objet JSON attendu :
getJSON().then(json => console.log(json)); // prints { foo: 'bar' }
En conclusion, les fonctions asynchrones renvoient toujours des promesses et wait suspend simplement l'exécution jusqu'à la résolution. Pour obtenir le résultat, un déballage explicite à l’aide de wait ou .then() est nécessaire. Ce mécanisme garantit l'intégrité du modèle Promise et empêche le comportement imprévisible qui pourrait survenir si l'accès direct aux résultats Promise était autorisé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!