Fire et oublier les promesses dans Node.js (ES7)
La programmation asynchrone dans Node.js implique souvent de travailler avec des promesses. Les promesses représentent l'achèvement ou l'échec éventuel d'une opération asynchrone. Dans certains scénarios, vous souhaiterez peut-être lancer une opération asynchrone sans attendre son achèvement. C'est ce qu'on appelle « tirer et oublier » une promesse.
Considérez l'extrait de code suivant :
redisClientAsync.delAsync('key'); return await someOtherAsyncFunction();
Dans une fonction asynchrone, vous pouvez exécuter la première ligne sans utiliser wait. Cela crée une promesse et l'écarte immédiatement.
Est-ce acceptable ?
Oui, il est possible d'exécuter des tâches asynchrones de cette manière. En déclenchant et en oubliant la promesse, les deux fonctions asynchrones (création de promesse et la fonction someOtherAsyncFunction) s'exécuteront simultanément.
Gestion des erreurs
Un problème potentiel avec cette approche est que si la promesse créée par delAsync est rejetée, vous ne serez pas averti. Cela peut conduire à des rejets non gérés qui finissent par faire planter votre processus.
Alternatives pour ignorer les résultats
Si vous ne vous souciez pas du résultat d'une opération asynchrone, il existe plusieurs façons de le gérer :
Opérateur du vide : Utilisez le vide opérateur pour ignorer le résultat :
void (await someAsyncFunction());
Catch and Ignore : Ignorer les exceptions en utilisant la méthode catch avec un gestionnaire vide :
... someAsyncFunction().catch(function ignore() {}) ...
Exécution parallèle : Si vous souhaitez toujours attendre d'autres opérations asynchrones mais ne vous souciez pas du résultat d'une opération spécifique, utilisez Promise.all avec un tableau :
var [_, res] = await Promise.all([ someAsyncFunction(), // result is ignored, exceptions aren't someOtherAsyncFunction() ]); return res;
Conclusion
Bien qu'il soit possible de déclencher et d'oublier des promesses dans Node.js, il est important d'être conscient des risques potentiels associés au fait d'ignorer les refus. Réfléchissez bien si vous ne vous souciez vraiment pas du résultat d'une opération asynchrone avant d'employer cette technique. De plus, il existe des approches alternatives pour gérer les résultats qui ne présentent pas d'intérêt.
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!