Maison >interface Web >js tutoriel >Différence entre l'utilisation d'async/wait et de promesses ?

Différence entre l'utilisation d'async/wait et de promesses ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-27 14:32:09620parcourir

Opérations asynchrones JavaScript : explication détaillée de Promise et async/await

Promise et async/await sont deux façons pour JavaScript de gérer les opérations asynchrones. Cet article expliquera leurs différences, leurs avantages et les scénarios applicables.

Promesse

  1. Définition : Un objet Promise représente l'achèvement (ou l'échec) éventuel d'une opération asynchrone et sa valeur de résultat.
  2. Grammaire :
<code class="language-javascript">const fetchData = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("数据已获取");
    }, 1000);
  });
};

fetchData()
  .then((data) => console.log(data))
  .catch((error) => console.error(error));</code>
  1. Principales caractéristiques :
  • Utilisez .then() pour gérer les résultats réussis.
  • Utilisez .catch() pour gérer les erreurs.
  • Vous pouvez utiliser .then() pour appeler en chaîne plusieurs opérations asynchrones.
  1. Avantages :
  • Mieux que l'enfer des rappels (.then()Les appels enchaînés sont plus propres que les rappels imbriqués).
  • Utilisez .catch() pour la gestion explicite des erreurs.
  1. Défi :
  • Lorsqu'il s'agit de nombreuses promesses, les appels enchaînés peuvent toujours être difficiles à lire (appelés "Promise Hell").
  • Lors de l'enchaînement de plusieurs .then() appels, la gestion des erreurs peut nécessiter une attention particulière.

Async/Attendre

  1. Définition : async/await est un sucre syntaxique construit sur Promise, donnant au code asynchrone l'apparence et l'exécution d'un code synchrone.
  2. Grammaire :
<code class="language-javascript">const fetchData = async () => {
  try {
    const data = await new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve("数据已获取");
      }, 1000);
    });
    console.log(data);
  } catch (error) {
    console.error(error);
  }
};

fetchData();</code>
  1. Principales caractéristiques :
  • Utilisez le mot-clé async pour déclarer une fonction qui renvoie une promesse.
  • Utilisez await pour suspendre l'exécution jusqu'à ce que la promesse soit terminée.
  • Utilisez try...catch pour gérer les erreurs.
  1. Avantages :
  • Lisibilité du code : par rapport aux .then() appels en chaîne, la syntaxe est plus claire et plus facile à comprendre.
  • Plus facile à déboguer : les outils de débogage vous permettent de parcourir le code asynchrone/en attente, tout comme le code synchrone.
  • try...catch est utilisé pour la gestion centralisée des erreurs.
  1. Défi :
  • doit être utilisé dans une fonction déclarée avec async.
  • Peut parfois conduire à un comportement bloquant s'il n'est pas géré correctement dans des boucles ou des appels asynchrones séquentiels.

Difference of using async / await vs promises?


Quand utiliser

Promesse :

  • Pour des opérations asynchrones simples et ponctuelles.
  • Lors de l'utilisation d'une bibliothèque ou d'une API conçue autour de Promises.
  • Lorsque plusieurs opérations non liées sont appelées dans une chaîne.

Async/Attendre :

  • Pour les flux de travail complexes avec plusieurs opérations asynchrones dépendantes.
  • Lorsqu'un code plus clair et plus lisible est nécessaire.
  • Lorsque le débogage est critique.

Utiliser en combinaison

Async/await peut être combiné avec Promise pour des cas d'utilisation avancés :

<code class="language-javascript">const fetchData = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => resolve("数据已获取"), 1000);
  });
};

const processData = async () => {
  try {
    const data = await fetchData();
    console.log(data);
  } catch (error) {
    console.error(error);
  }
};

processData();</code>

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!

Déclaration:
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