Maison >interface Web >js tutoriel >Les promesses de Node.js (ES7) peuvent-elles implémenter « Fire and Forget » de manière asynchrone, et quels sont les risques ?

Les promesses de Node.js (ES7) peuvent-elles implémenter « Fire and Forget » de manière asynchrone, et quels sont les risques ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-27 13:23:18778parcourir

Can Node.js (ES7) Promises Implement

Fire et oublier les promesses dans Node.js (ES7)

Dans la programmation asynchrone, il est courant d'exécuter des tâches sans attendre leurs résultats . Pouvez-vous faire cela avec des promesses dans Node.js (ES7) ?

Question :

Considérez l'extrait de code suivant :

redisClientAsync.delAsync('key');
return await someOtherAsyncFunction();

Peut-on vous enveloppez la première ligne dans une fonction asynchrone sans l'attendre ? Que se passe-t-il si vous le faites ?

Réponse :

Oui, vous pouvez exécuter les deux fonctions asynchrones en parallèle sans attendre l'appel delAsync. En créant et en rejetant la promesse, vous la « renvoyez et l'oubliez ».

Pourquoi n'est-ce pas idéal ?

Cette approche présente un inconvénient important. Si la promesse delAsync est rejetée, vous ne serez pas averti. Cela pourrait entraîner des erreurs de rejet non gérées et des plantages potentiels.

Approches alternatives :

  • Attendez la promesse : Si vous souhaitez gérer effets secondaires ou exceptions, vous devez attendre la promesse. Cependant, si vous n'avez pas besoin de son résultat, vous pouvez le supprimer en utilisant void (attendre someAsyncFunction()).
  • Attrapez les exceptions : Si vous ne vous souciez pas du résultat mais que vous souhaitez pour intercepter les exceptions, vous pouvez utiliser ...someAsyncFunction().catch(function ignore() {})....
  • Exécuter des fonctions dans parallel: Pour exécuter les tâches delAsync et someOtherAsyncFunction simultanément, vous pouvez utiliser Promise.all():

    var [_, res] = await Promise.all([
      someAsyncFunction(), // result is ignored, exceptions aren't
      someOtherAsyncFunction()
    ]);
    return res;

    Dans ce cas, le résultat de delAsync est ignoré, mais des exceptions sont toujours levées.

Conclusion :

Pendant que « feu et oublier" peut être pratique, il est essentiel de considérer les conséquences potentielles. En définissant clairement vos besoins (attente, gestion des résultats et capture des exceptions), vous pouvez garantir une gestion appropriée des tâches asynchrones dans vos applications Node.js.

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