La manipulation Js promesse de rejet
Comment gérez-vous un message d'erreur (par exemple. "nouveau message d'erreur" ci-dessous) qui est à l'extérieur de la promesse?
function testError() {
throw new Error("new error") //how to handle this?
var p123 = new Promise(function(resolve, reject) {
resolve(123)
});
return p123
};
testError().catch(err => {
return err; //code doesn't come here
})
.then(ok => {
console.log(ok)
});
- Utilisation
try/catch
- Vous aurez à jeter l'erreur à l'intérieur de la promesse de fonction pour les .catch() fonctionne.
- Voir Comment puis-je attraper une erreur asynchrone à l'aide de JS promesses?
Vous devez vous connecter pour publier un commentaire.
Si vous n'êtes pas sûr de savoir si une fonction jeter (ou renvoyer une valeur) de façon synchrone, vous pouvez l'appeler à l'aide
.then()
. Ce sera l'envelopper de sorte que le résultat sera géré de manière cohérente, peu importe comment elle est produite:JS:
Puisque l'erreur n'implique pas le code asynchrone, un habitué de
try-catch
devrait faire très bien ici:Noter que lorsque le
async-await
modèle devient finalement le natif façon de résoudre les promesses, lestry-catch
deviendra aussi le natif manière de gérer les erreurs:Comme on peut le vérifier facilement, celui-ci gère correctement à la fois la synchronisation et la async erreur et est beaucoup plus propre que
then-catch
.try-catch
offre le summum de l'homogénéité.async
/await
sont disponibles, mais pas quand ils ne sont pas disponibles.Puisque l'erreur est levée à l'extérieur des promesses, vous ne pouvez pas l'attraper à l'aide d'une promesse instruction catch.
Vous pouvez utiliser un try/catch pour intercepter l'erreur à la place.
Si vous le pouvez, de réécrire votre
testError
fonction de la façonJS:
console.error
throw
ligne pour voir la promesse de résoudre avec succèsVous réécrire, parce que faire un appelant vérifier à la fois des exceptions et des rejets est un anti-pattern:
JS:
Cela est implicite avec
async
fonctions; ils retournent toujours une promesse:JS: