Promesse reject() provoque “Uncaught (promettre)” avertissement
Une fois une promesse reject()
callback n'est appelé, un message d'avertissement "Uncaught (promettre)" s'affiche dans la console Chromée. Je ne peut pas envelopper la tête autour de la raison derrière elle, ni comment s'en débarrasser.
var p = new Promise((resolve, reject) => {
setTimeout(() => {
var isItFulfilled = false
isItFulfilled ? resolve('!Resolved') : reject('!Rejected')
}, 1000)
})
p.then(result => console.log(result))
p.catch(error => console.log(error))
Avertissement:
Edit:
J'ai découvert que si la onRejected
gestionnaire n'est pas explicitement prévu à l' .then(onResolved, onRejected)
méthode, JS fournira automatiquement implicite. Il ressemble à ceci: (err) => throw err
. La génération automatique d'gestionnaire de lancer à son tour.
Référence:
Si IsCallable(onRejected) " est faux, puis
Laissez onRejected être "Lanceur".
http://www.ecma-international.org/ecma-262/6.0/index.html#sec-performpromisethen
- Semble que vous êtes en utilisant Angulaire du
ZoneAwarePromise
. Ils ont mis en œuvre le Rejet de Manipulation incorrecte, au moins dans certaines versions. Rappelez-vous cependant, rien retourné à partir de l'Accomplissement de Gestionnaire (alors arguments[0]) va changer la méthode de chaînage des résultats tels que la prochainethen
invocation est à venir à partir d'une nouvelle Promesse avec la valeur de retour comme le [potentiel] état.
Vous devez vous connecter pour publier un commentaire.
Cela se produit parce que vous n'avez pas à joindre un gestionnaire catch à la promesse renvoyé par la première
then
méthode, qui est donc sans gestionnaire pour quand la promesse rejette. Vous ne ont l'un pour l'promessep
dans la dernière ligne, mais pas pour le enchaîné promesse, qui est retourné par lathen
méthode, dans la ligne avant.Que vous avez bien ajouté dans les commentaires ci-dessous, lorsqu'un gestionnaire catch n'est pas fourni (ou ce n'est pas une fonction), le par défaut on va jeter l'erreur. Au sein d'une promesse de la chaîne de cette erreur peuvent être pris vers le bas de la ligne avec un
catch
méthode de rappel, mais si personne n'est là, le JavaScript, le moteur de traiter l'erreur comme avec toute autre erreur non interceptée, et d'appliquer le gestionnaire par défaut dans de telles circonstances, ce qui entraîne la sortie de vous voir dans la console.Pour éviter cela, la chaîne de la
.catch
méthode à la promesse renvoyé par la premièrethen
, comme ceci:If IsCallable(onRejected)
est false, puis LaissezonRejected
être "Lanceur". Qui ressemble à quelque chose comme ceci:arg => throw arg
Un vide onRejected gestionnaire() => {}
pouvez remplacer ce comportement. Maisnull
ne sera pas. réf: ecma-international.org/ecma-262/6.0/...p
, mais aussi envie d'attraper une exception dans lethen
de rappel (qui rejette la promesse retourné parthen()
). En général, lorsque vous nep.then(...).then(...).then(...).then(...).catch(...)
vous pourrez attraper des rejets de n'importe où dans la chaîne de promesses.