Maison > interface Web > js tutoriel > Pourquoi l'imbrication « async/await » dans les constructeurs de promesses est-elle un anti-modèle ?

Pourquoi l'imbrication « async/await » dans les constructeurs de promesses est-elle un anti-modèle ?

Mary-Kate Olsen
Libérer: 2024-12-16 13:49:12
original
642 Les gens l'ont consulté

Why is Nesting `async/await` within Promise Constructors an Anti-Pattern?

L'anti-modèle d'imbrication async/wait dans les constructeurs de promesses

Dans ce cas, où la fonction async.eachLimit est utilisée pour gérer le nombre d'opérations simultanées, un dilemme se pose. La tentation initiale est de structurer le code comme suit :

function myFunction() {
  return new Promise(async (resolve, reject) => {
    eachLimit((await getAsyncArray), 500, (item, callback) => {
      // Operations using native promises
    }, (error) => {
      if (error) return reject(error);
      // Resolve with the next value
    });
  });
}
Copier après la connexion

Bien qu'il puisse sembler logique de déclarer la fonction "myFunction" comme asynchrone, cela n'est pas réalisable car le rappel interne de la fonction "eachLimit" reste inaccessible. Cependant, cette approche pose un écueil important : le risque que des erreurs restent non gérées.

Cette approche est un exemple classique de l'anti-modèle qui implique l'utilisation de promesses au sein du constructeur d'une autre promesse. Dans ce cas, le risque d’erreurs non gérées est particulièrement aigu. Pour éviter cela, considérez l'extrait de code suivant :

let p = new Promise(resolve => {
  ""(); // TypeError
  resolve();
});

(async () => {
  await p;
})().catch(e => console.log("Caught: " + e)); // Catches the error.
Copier après la connexion

Dans ce scénario, alors que la première ligne renvoie une exception, l'erreur est gérée gracieusement par le bloc "catch" de la fonction de flèche asynchrone. Une gestion appropriée des erreurs est essentielle pour maintenir la stabilité et éviter tout comportement inattendu dans votre base de 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!

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