Maison  >  Article  >  interface Web  >  La promesse est implémentée de manière asynchrone

La promesse est implémentée de manière asynchrone

php中世界最好的语言
php中世界最好的语言original
2018-04-17 16:03:151438parcourir

Cette fois, je vais vous apporter la Promesse de mettre en œuvre une implémentation asynchrone. Quelles sont les précautions pour la Promesse de mettre en œuvre une implémentation asynchrone, jetons un coup d'œil.

Afin de garantir la lisibilité, cet article adopte une traduction libre plutôt qu'une traduction littérale, et le code source a été largement modifié. De plus, les droits d'auteur de cet article appartiennent à l'auteur original et la traduction est uniquement destinée à l'apprentissage.

Lors de l'écriture de code asynchrone à l'aide de Promise, utilisez le rejet pour gérer les erreurs. Parfois, les développeurs l’ignorent généralement, ce qui entraîne la non-gestion de certaines erreurs. Par exemple :

function main() {
asyncFunc()
.then(···)
.then(() => console.log('Done!'));
}

Étant donné que l'erreur n'est pas capturée à l'aide de la méthode catch, lorsque la fonction asyncFunc() est rejetée, l'erreur générée n'est pas gérée.

Ce blog expliquera comment détecter les erreurs de promesse non gérées dans les navigateurs et Node.js.

Erreur de promesse non gérée dans le navigateur

Certains navigateurs (tels que Chrome) sont capables de détecter les erreurs de promesse non gérées.

rejet non géré

Écoutez l'événement unhandledrejection pour capturer les erreurs de promesse non gérées :

window.addEventListener('unhandledrejection', event => ···);

Cet événement est une instance de PromiseRejectionEvent, qui possède les 2 attributs les plus importants :

promesse : rejeter la promesse

raison : valeur de rejet de la promesse

Exemple de code :

window.addEventListener('unhandledrejection', event =>
{
console.log(event.reason); // 打印"Hello, Fundebug!"
});
function foo()
{
Promise.reject('Hello, Fundebug!');
}
foo();

Le plug-in de surveillance des erreurs JavaScript de Fundebug écoute l'événement de rejet non géré, afin de pouvoir capturer automatiquement les erreurs de promesse non gérées.

rejet traité

Lorsqu'une erreur de promesse n'est pas gérée initialement, mais est traitée ultérieurement, l'événement Rejectionhandled est déclenché :

window.addEventListener('rejectionhandled', event => ···);

Cet événement est une instance de PromiseRejectionEvent.

Exemple de code :

window.addEventListener('unhandledrejection', event =>
{
console.log(event.reason); // 打印"Hello, Fundebug!"
});
 
window.addEventListener('rejectionhandled', event =>
{
console.log('rejection handled'); // 1秒后打印"rejection handled"
});
 
 
function foo()
{
return Promise.reject('Hello, Fundebug!');
}
var r = foo();
 
setTimeout(() =>
{
r.catch(e =>{});
}, 1000);

Erreur de promesse non gérée dans Node.js

Écoutez l'événement unhandledRejection pour capturer les erreurs de promesse non gérées :

process.on('unhandledRejection', (raison, promesse) => ···);

Exemple de code :

process.on('unhandledRejection', reason =>
{
console.log(reason); // 打印"Hello, Fundebug!"
});
 
function foo()
{
Promise.reject('Hello, Fundebug!');
}
 
foo();

Remarque : Node.js v6.6.0+ signalera par défaut les erreurs de promesse non gérées, vous pouvez donc ne pas écouter l'événement de rejet non géré.

Le plug-in de surveillance des erreurs Node.js de Fundebug écoute l'événement unhandledRejection, afin de pouvoir détecter automatiquement les erreurs Promise non gérées.

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :



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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn