Maison > interface Web > js tutoriel > Comment Async/Await peut-il être utilisé pour convertir une fonction de chargement d'image basée sur un rappel en une approche basée sur des promesses pour un accès synchrone aux données d'image ?

Comment Async/Await peut-il être utilisé pour convertir une fonction de chargement d'image basée sur un rappel en une approche basée sur des promesses pour un accès synchrone aux données d'image ?

Patricia Arquette
Libérer: 2024-11-02 13:09:03
original
660 Les gens l'ont consulté

How can Async/Await be used to convert a callback-based image loading function into a promise-based approach for synchronous image data access?

Utilisation d'Async/Await pour convertir un rappel en promesse

En JavaScript, la fonction suivante récupère les données d'image à partir d'une URL :

<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>
Copier après la connexion

Cette fonction utilise une approche de rappel, mais elle présente une limitation lors de la tentative d'accès aux données d'image de manière synchrone. Si vous deviez invoquer getImageData dans la méthode ready comme suit :

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

vous obtiendriez undefined puisque l'image ne serait pas encore chargée. Par conséquent, il devient nécessaire d'utiliser des techniques asynchrones pour gérer l'opération de chargement de l'image avant d'accéder aux données de l'image.

Pour y parvenir, vous pouvez exploiter le constructeur Promise comme suit :

<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 error cases as well
    img.src = url;
  });
}</code>
Copier après la connexion

Maintenant , vous pouvez utiliser async/await pour attendre la promesse loadImage et récupérer ensuite les données de l'image :

<code class="javascript">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

Dans cette implémentation modifiée, async/await garantit que le code s'arrête jusqu'à ce que la promesse loadImage soit résolue, garantissant ainsi que les données d'image sont disponibles au moment de l'enregistrement.

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