Maison >interface Web >js tutoriel >Comment gérer efficacement les rappels asynchrones avec des modèles de promesse ?

Comment gérer efficacement les rappels asynchrones avec des modèles de promesse ?

DDD
DDDoriginal
2024-11-16 04:55:02966parcourir

How Can You Efficiently Manage Asynchronous Callbacks with Promise Patterns?

Gérer les rappels asynchrones avec des modèles de promesse

Étant donné un ensemble de rappels asynchrones, il est souvent nécessaire de différer l'exécution jusqu'à ce que tous les rappels soient terminés. Ce scénario se produit dans des situations où les données doivent être accumulées ou traitées collectivement au cours de plusieurs opérations asynchrones.

Approche de comptage manuel

Une approche consiste à suivre manuellement l'état d'achèvement de chaque rappel. Un tableau, terminé, est initialisé avec des valeurs booléennes représentant l'état d'achèvement de chaque rappel. À mesure que chaque rappel est appelé, l'élément correspondant dans done est défini sur true. Une boucle while est ensuite utilisée pour vérifier en permanence si tous les éléments de done sont définis sur true. Une fois terminé, le traitement souhaité peut être exécuté.

Utilisation des promesses jQuery

Dans jQuery, $.ajax() renvoie une promesse, qui représente l'achèvement éventuel d'un requête asynchrone. En tirant parti des promesses, une approche plus élégante peut être utilisée :

  1. Créez un tableau de promesses, de promesses, en y insérant chaque promesse $.ajax.
  2. Utilisez $.when() , qui accepte plusieurs promesses comme arguments, pour créer une nouvelle promesse qui se résout lorsque toutes les promesses du tableau promises sont résolues.
  3. Enchaînez un rappel à $.when() pour gérer les données résolues.

Promesses standard ES6

Les navigateurs modernes et les environnements node.js prennent en charge les promesses natives. Si disponible, vous pouvez utiliser la fonction Promise.all :

  1. Créez un tableau de promesses, de promesses, comme dans l'exemple jQuery.
  2. Utilisez Promise.all() pour créer un nouvelle promesse qui se résout en un tableau des valeurs résolues de toutes les promesses dans les promesses.
  3. Enchaînez un rappel à Promise.all() pour gérer les données résolues.

Polyfilling Promises

Dans les environnements plus anciens sans prise en charge native des promesses, vous pouvez utiliser une bibliothèque comme BabelJS ou un polyfill de promesse pour émuler la fonctionnalité de promesse.

Regroupement d'opérations sans promesse

🎜>

Si vos opérations asynchrones ne renvoient pas de promesses, vous pouvez les "promettre" en les enveloppant dans une fonction qui renvoie une promesse et la résout avec le résultat ou la rejette en cas d'erreur. Les fonctions promises peuvent ensuite être utilisées conjointement avec les promesses comme décrit ci-dessus.

Bibliothèques de promesses tierces

Les bibliothèques comme Bluebird fournissent des fonctions utilitaires supplémentaires pour gérer les opérations asynchrones. Par exemple, Promise.map peut être utilisé pour appliquer une opération asynchrone à chaque élément d'un tableau, renvoyant une seule promesse qui se résout en un tableau de tous les résultats.

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