Maison >interface Web >js tutoriel >Comment utiliser des fonctions asynchrones / attend pour écrire du code asynchrone qui a l'air et se sent synchrone?

Comment utiliser des fonctions asynchrones / attend pour écrire du code asynchrone qui a l'air et se sent synchrone?

Johnathan Smith
Johnathan Smithoriginal
2025-03-14 11:37:41479parcourir

Comment utiliser des fonctions asynchrones / attend pour écrire du code asynchrone qui a l'air et se sent synchrone?

Async / Await est une fonctionnalité puissante dans JavaScript moderne (et d'autres langages de programmation comme Python et C #) qui vous permet d'écrire du code asynchrone qui ressemble et se comporte comme un code synchrone. Voici comment vous pouvez utiliser Async / Await pour y parvenir:

  1. Déclarer une fonction asynchrone : Pour utiliser Async / Wait, vous devez définir une fonction asynchrone. Vous pouvez le faire en ajoutant le mot-clé async avant la déclaration de fonction. Voici un exemple:

     <code class="javascript">async function fetchData() { // Asynchronous operations here }</code>
  2. Utilisez le mot-clé await : à l'intérieur d'une fonction asynchrone, vous pouvez utiliser le mot-clé await avant une promesse. Cela permet à la fonction de suspendre l'exécution jusqu'à ce que la promesse se résout, puis elle reprend avec la valeur résolue. Voici un exemple utilisant l'API Fetch:

     <code class="javascript">async function fetchData() { const response = await fetch('https://api.example.com/data'); const data = await response.json(); return data; }</code>

    Dans cet exemple, fetch Renvoie une promesse et await fait que la fonction attend que la promesse se résout. Une fois résolue, la réponse est convertie en JSON à l'aide response.json() , qui renvoie également une promesse, et await est à nouveau utilisée.

  3. Appeler la fonction asynchrone : Pour appeler une fonction asynchrone et gérer son résultat, vous pouvez utiliser .then() ou l' await dans une autre fonction asynchrone. Voici comment vous pourriez appeler fetchData :

     <code class="javascript">fetchData().then(data => console.log(data)) .catch(error => console.error('Error:', error)); // or async function useData() { try { const data = await fetchData(); console.log(data); } catch (error) { console.error('Error:', error); } }</code>

En suivant ces étapes, vous pouvez écrire des opérations asynchrones d'une manière qui semble synchrone, ce qui rend votre code plus facile à lire et à maintenir.

Quels sont les avantages de l'utilisation de l'async / attendre par rapport aux méthodes de rappel traditionnelles dans la programmation asynchrone?

L'utilisation d'Async / Await offre plusieurs avantages par rapport aux méthodes de rappel traditionnelles dans la programmation asynchrone:

  1. LIBIBILITÉ : Async / Await fait que le code asynchrone ressemble et se comporte davantage comme du code synchrone. Cela améliore la lisibilité car le flux de code est plus facile à suivre par rapport aux rappels imbriqués (Hellback Hell) vu dans JavaScript asynchrone traditionnel.
  2. Gestion des erreurs : avec Async / Await, vous pouvez utiliser des blocs d'essai / capture traditionnels pour gérer les erreurs. Il s'agit d'une approche plus intuitive que de gérer plusieurs gestionnaires d'erreurs de rappel, ce qui rend la gestion des erreurs plus simple et centralisée.
  3. Débogage : Parce que le code asynchrone / attente est plus facile à lire et à comprendre, il est également plus facile de déboguer. Vous pouvez utiliser un débogueur pour parcourir le code asynchronisé / attendre comme s'il était synchrone.
  4. Entretien : le code écrit avec asynchronisation / attendre est généralement plus facile à entretenir. La nature séquentielle du code permet aux développeurs de comprendre et de modifier plus facilement le code existant.
  5. Interopérabilité : Async / Await fonctionne bien avec les promesses, qui sont maintenant largement utilisées dans de nombreuses API JavaScript moderne. Cela signifie que vous pouvez intégrer de manière transparente Async / AWAIT à un autre code basé sur les promesses.

Comment puis-je gérer efficacement les erreurs lors de l'utilisation de l'async / attendre dans mon code?

La gestion efficace des erreurs avec asynchronisation / attente implique d'utiliser des blocs Try / Catch dans les fonctions asynchrones. Voici comment vous pouvez le faire:

  1. Utilisez des blocs Try / Catch : enveloppez vos expressions d'attente dans un bloc d'essai et gérez les erreurs dans le bloc de capture:

     <code class="javascript">async function fetchData() { try { const response = await fetch('https://api.example.com/data'); if (!response.ok) { throw new Error('Network response was not ok'); } const data = await response.json(); return data; } catch (error) { console.error('There was a problem with the fetch operation:', error); // You can also rethrow the error or handle it further throw error; } }</code>
  2. Propagation d'erreur : les erreurs dans les fonctions asynchrones peuvent être propagées dans la pile d'appels, vous permettant de les attraper à un niveau supérieur si nécessaire:

     <code class="javascript">async function useData() { try { const data = await fetchData(); console.log(data); } catch (error) { console.error('Error in useData:', error); } }</code>
  3. Awaits multiples : lorsque vous avez plusieurs expressions d'attente, assurez-vous qu'ils sont tous dans le bloc d'essai pour attraper toutes les erreurs potentielles:

     <code class="javascript">async function processData() { try { const data1 = await fetchData1(); const data2 = await fetchData2(data1); // Process both data1 and data2 } catch (error) { console.error('Error in processData:', error); } }</code>

Quels sont les pièges courants à éviter lors de la mise en œuvre de fonctions asynchrones / attend?

Lors de la mise en œuvre de fonctions asynchrones / attendre, faites attention à ces pièges courants:

  1. Oubliant d'utiliser await : Si vous oubliez d'utiliser await avec une promesse à l'intérieur d'une fonction asynchrone, la fonction n'attendra pas la promesse de résoudre. Cela peut conduire à un comportement inattendu:

     <code class="javascript">async function fetchData() { const response = fetch('https://api.example.com/data'); // Missing await const data = response.json(); // This will not work as expected return data; }</code>
  2. Le blocage de la boucle d'événement : Bien qu'Async / Await rend le code asynchrone par un aspect synchrone, vous devez éviter de l'utiliser d'une manière qui pourrait bloquer la boucle d'événement. Par exemple, n'effectuez pas de tâches à forte intensité de CPU de manière synchrone dans une fonction asynchrone.
  3. Fonctions asynchrones imbriquées : Évitez les fonctions asynchrones profondément nichées, car cela peut entraîner une confusion et réduire la lisibilité. Au lieu de cela, essayez de garder vos fonctions asynchrones à plat et utilisez-les au niveau supérieur lorsque cela est possible.
  4. Ne pas gérer correctement les erreurs : le non-utilisation des blocs d'essai / capture ou non les erreurs de propagation correctement peuvent conduire à des refus de promesses non performes. Gérez toujours les erreurs dans les fonctions asynchrones.
  5. Abusant async sur les fonctions non-asynchrones : n'utilisez pas le mot clé async inutilement sur les fonctions qui ne contiennent pas d'expressions d'attente, car elle peut conduire à des frais généraux en raison de la création de promesses inutiles.
  6. async déroutant avec await : N'oubliez pas que async marque une fonction comme asynchrone, mais il est en await qui s'arrête en fait jusqu'à ce qu'une promesse résout. Un malentendu cela peut conduire à un code incorrect.

En étant conscient de ces pièges et en suivant les meilleures pratiques, vous pouvez utiliser efficacement l'async / attendre pour écrire du code asynchrone propre et efficace.

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
Article précédent:Node.js pour les débutantsArticle suivant:Node.js pour les débutants