Maison > interface Web > js tutoriel > le corps du texte

Comment puis-je convertir une fonction de rappel en promesse en utilisant async/await en JavaScript ?

Mary-Kate Olsen
Libérer: 2024-11-02 04:04:30
original
538 Les gens l'ont consulté

How can I convert a callback function to a Promise using async/await in JavaScript?

Conversion d'une fonction de rappel en promesse avec async/await

En JavaScript, la possibilité de retarder l'exécution du code jusqu'à ce que certains événements se produisent est une exigence courante. Lorsque vous travaillez avec du code asynchrone, les rappels constituent l'approche traditionnelle en JavaScript, mais les promesses offrent une manière plus concise et flexible de gérer les opérations asynchrones. Les promesses permettent d'enchaîner et d'attendre des opérations, simplifiant le code asynchrone et améliorant la lisibilité.

Problème

Considérez la fonction suivante qui récupère une image à partir d'une URL, la charge et renvoie sa largeur et height :

<code class="js">function getImageData(url) {
  const img = new Image();
  img.addEventListener('load', function () {
    return { width: this.naturalWidth, height: this.naturalHeight };
  });
  img.src = url;
}</code>
Copier après la connexion

En utilisant cette fonction comme rappel, nous pouvons rencontrer des problèmes lorsque nous tentons d'accéder immédiatement aux données de l'image. Par exemple, si nous utilisons la fonction comme suit :

<code class="js">ready() {
  console.log(getImageData(this.url));
}</code>
Copier après la connexion

La fonction getImageData s'exécute immédiatement, mais l'image n'a peut-être pas fini de se charger, ce qui entraîne une sortie indéfinie. Pour surmonter ce problème, nous pouvons exploiter les promesses et async/await pour garantir que les données de l'image ne sont récupérées qu'une fois l'image chargée avec succès.

Solution

Au lieu de nous fier aux rappels, nous pouvons convertir getImageData en une fonction basée sur des promesses :

<code class="js">function loadImage(url) {
  return new Promise((resolve, reject) => {
    const img = new Image();
    img.addEventListener('load', () => resolve(img));
    img.addEventListener('error', reject); // Don't forget to handle errors
    img.src = url;
  });
}</code>
Copier après la connexion

Maintenant, nous pouvons utiliser async/await pour récupérer les données d'image uniquement lorsqu'elles deviennent disponibles :

<code class="js">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>
Copier après la connexion

En utilisant des promesses et async/await, nous pouvons garantir que les données de l'image ne sont accessibles qu'une fois l'image chargée, offrant ainsi une approche plus robuste et plus propre de la gestion des opérations asynchrones.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!