Maison >interface Web >js tutoriel >Est-ce que async/await en JavaScript renvoie toujours une promesse, et pourquoi ?
Les promesses sont un aspect fondamental de la programmation asynchrone en JavaScript. Lorsqu'il s'agit d'async/wait, il est important de démystifier l'idée selon laquelle les fonctions async renvoient toujours une promesse.
Le mot-clé wait, placé avant un appel de fonction retournant une promesse, suspend l'exécution de la fonction en cours jusqu'à ce que le La promesse est soit résolue, soit rejetée. Cependant, cette suspension ne déballe pas la Promesse. Le résultat de la promesse est toujours encapsulé dans l'objet Promise renvoyé.
Pour illustrer, considérons le 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; };
Lors de l'appel de getJSON(), il renvoie une promesse car l'instruction wait suspend simplement l'exécution jusqu'à ce que la requête soit terminée :
console.log(getJSON()); // returns Promise
En revanche, lors du chaînage de .then(), le résultat de la promesse est enfin exposé :
getJSON().then(json => console.log(json)); // prints { foo: 'bar' }
Pourquoi ne pouvez-vous pas contourner l'encapsulation de la promesse avec console.log(getJSON()) ? C’est une propriété fondamentale des Promesses. Les promesses représentent des opérations asynchrones et leurs résultats ne sont connus que lorsqu'elles sont résolues ou rejetées. L'accès externe au résultat est intentionnellement interdit, garantissant que la promesse reste le seul médiateur du résultat.
N'oubliez pas que async/await rend le travail avec les promesses plus pratique en suspendant l'exécution lorsque des promesses sont rencontrées, mais ce n'est pas le cas. supprimez la nécessité de déballer les promesses pour accéder à leurs résultats.
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!