Maison > Questions et réponses > le corps du texte
Code :
var der = {};
var p = new Promise(function (resolve, reject) {
der.reject = reject;
})
p.then((v) => {
console.log('resolve');
console.log(v);
})
p.catch(function (v) {
console.log(v);
console.log('reject');
console.log(v);
});
der.reject(p);
console.log(p);
Seul le rejet est émis sous Firefox, mais la saisie est normalement sous Chrome, puis Uncaught (promis) apparaîtra
Excusez-moi, pourquoi une exception non capturée se produit-elle ? La capture de p est clairement définie, et pourquoi Firefox ne renvoie-t-il que le rejet, et l'opération de sortie de p n'a aucun effet (en fait, elle devrait être provoquée par une exception non capturée)
Supplément :
La raison de l'exception non interceptée est que bien que la deuxième fonction ne soit pas définie dans then, elle est toujours exécutée et la cause et l'état sont transmis au nouvel objet Promise renvoyé. L'objet Promise renvoyé n'a pas de rappel catch, donc une exception est signalée
Mais la raison pour laquelle la sortie de p dans Firefox n'a aucun effet n'est toujours pas claire
伊谢尔伦2017-06-14 10:55:56
var der = {};
var p = new Promise(function (resolve, reject) {
der.reject = reject;
})
// 下面修改成这个样子,因为then内部的处理函数也需要异常捕获
p.then((v) => {
console.log('resolve');
console.log(v);
}).catch(function (v) {
console.log(v);
console.log('reject');
console.log(v);
});
der.reject(p);
console.log(p);
欧阳克2017-06-14 10:55:56
La promesse est équivalente à une norme. Tout prototype conforme à la norme peut être appelé une promesse. Différents navigateurs peuvent avoir des fonctionnalités différentes en dehors de la norme. Évidemment, Firefox pense que .catch et .then peuvent être déclarés séparément, puis au moment de l'exécution. Réponse, c'est-à-dire qu'aucune erreur n'est signalée comme vous l'avez mentionné ci-dessus ; et Google estime que .catch doit être traité avec l'exception dans .then, il doit donc être appliqué à la promesse après .then. Si vous utilisez .then().catch ensemble, Google ne signalera pas d'erreur. La raison sous-jacente peut être que l’une est basée sur des événements et l’autre sur des sondages.