Lors de la gestion de scénarios asynchrones, il est crucial d'empêcher le nœud de planter à cause de rappels malveillants. Dans cet article, nous explorerons les meilleures pratiques d'utilisation des promesses Bluebird pour relever ce défi.
Considérez le scénario suivant :
function getPromise() { return new Promise((done, reject) => { setTimeout(() => { throw new Error("AJAJAJA"); }, 500); }); } ...
En lançant une exception dans setTimeout, nous contournons le mécanisme de gestion des erreurs de Bluebird et plantons le programme. Cependant, si l'exception se produit avant setTimeout, Bluebird la capture avec succès :
function getPromise() { return new Promise((done, reject) => { throw new Error("Oh no!"); setTimeout(() => { console.log("hihihihi"); }, 500); }); } ...
Cela démontre que les promesses n'interceptent pas les exceptions des rappels asynchrones. Au lieu de cela, ils gèrent les erreurs uniquement dans leurs rappels de constructeur ou dans leurs rappels then/catch.
Pour éviter les plantages de nœuds, ne lancez jamais d'erreurs dans les rappels asynchrones personnalisés. Au lieu de cela, rejetez la promesse environnante. Considérez la modification suivante :
function getPromise() { return new Promise((done, reject) => { setTimeout(() => { done(); }, 500); }).then(() => { console.log("hihihihi"); throw new Error("Oh no!"); }); } ...
En utilisant then pour encapsuler l'opération asynchrone, nous pouvons désormais gérer l'erreur dans le rappel Bluebird.
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!