Maison >interface Web >js tutoriel >Comment pouvez-vous convertir une fonction basée sur un rappel en une fonction basée sur une promesse en utilisant async/await en JavaScript ?
En JavaScript, les rappels sont une approche courante pour gérer les opérations asynchrones. Cependant, l’utilisation de rappels peut conduire à un code difficile à lire et à maintenir. Async/await est une fonctionnalité plus récente qui offre un moyen plus simple de travailler avec du code asynchrone.
L'un des principaux avantages d'async/await est la possibilité de suspendre l'exécution d'une fonction jusqu'à ce qu'une promesse soit résolue. Cela vous permet d'écrire du code plus facile à lire et à maintenir, en particulier lorsqu'il s'agit de plusieurs opérations asynchrones.
Énoncé du problème
Considérez la fonction suivante qui récupère les dimensions d'une image à partir d'une URL donnée à l'aide d'un rappel :
<code class="javascript">function getImageData(url) { const img = new Image(); img.addEventListener('load', function () { return { width: this.naturalWidth, height: this.naturalHeight }; }); img.src = url; }</code>
Cependant, ce code peut être problématique si vous devez récupérer les données de l'image immédiatement. Si vous deviez appeler la fonction getImageData comme ceci :
<code class="javascript">ready() { console.log(getImageData(this.url)); }</code>
Vous deviendriez indéfini car l'image n'a pas encore été chargée au moment de l'exécution du rappel.
Utilisation d'Async/ Attendre
Pour résoudre ce problème, vous pouvez utiliser async/await pour convertir la fonction getImageData en promesse. Voici comment procéder :
<code class="javascript">function loadImage(url) { return new Promise((resolve, reject) => { const img = new Image(); img.addEventListener('load', () => resolve(img)); img.addEventListener('error', reject); // Handle errors gracefully img.src = url; }); } async function getImageData(url) { const img = await loadImage(url); return { width: img.naturalWidth, height: img.naturalHeight }; } async function ready() { console.log(await getImageData(this.url)); }</code>
Dans ce code réécrit, nous créons d'abord une fonction loadImage qui renvoie une promesse. Cette promesse se résout lorsque l'image a fini de se charger ou est rejetée en cas d'erreur.
Ensuite, nous créons une fonction getImageData qui utilise async/await pour attendre que la promesse renvoyée par loadImage soit résolue avant de renvoyer les dimensions de l'image.
Enfin, nous pouvons appeler la fonction getImageData depuis la fonction ready en utilisant async/await. Cela garantit que la fonction ready n'enregistre les dimensions de l'image qu'une fois l'image chargée.
En utilisant async/await, vous pouvez simplifier le code qui implique des opérations asynchrones et le rendre plus facile à lire et à maintenir.
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!