Heim > Web-Frontend > js-Tutorial > Hauptteil

Nicht behandelte Promise-Fehler abfangen

一个新手
Freigeben: 2017-10-13 09:21:23
Original
2157 Leute haben es durchsucht

Unhandled Promise-Fehler können durch Abhören des Ereignisses unhandledrejection abgefangen werden.

Um die Lesbarkeit zu gewährleisten, verwendet dieser Artikel eine freie Übersetzung anstelle einer wörtlichen Übersetzung und der Quellcode wurde umfassend geändert. Darüber hinaus liegt das Urheberrecht dieses Artikels beim ursprünglichen Autor und die Übersetzung dient nur zum Lernen.

Wenn Sie asynchronen Code mit Promise schreiben, verwenden Sie reject, um Fehler zu behandeln. Manchmal ignorieren Entwickler dies, was dazu führt, dass einige Fehler nicht behandelt werden. Zum Beispiel:

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

Da die Methode catch nicht zum Abfangen des Fehlers verwendet wird, wenn die Funktion asyncFunc() reject verwendet wird, Der ausgegebene Fehler lautet Nicht verarbeitet.

In diesem Blog erfahren Sie, wie Sie nicht behandelte Promise-Fehler in Browsern bzw. Node.js abfangen.

Unbehandelte Promise-Fehler in Browsern

Einige Browser (z. B. Chrome) sind in der Lage, nicht behandelte Promise-Fehler abzufangen.

unhandledrejection

Hören Sie sich das Ereignis unhandledrejection an, um nicht behandelte Promise-Fehler zu erfassen:

window.addEventListener(
'unhandledrejection', event => ···);
Nach dem Login kopieren


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


Dieses Ereignis istPromiseRejectionEvent Instanz, die die 2 wichtigsten Eigenschaften hat:

  • promise: Ablehnungsversprechen

  • reason: Der Ablehnungswert von Versprechen

Beispielcode:

window.addEventListener(
'rejectionhandled', event => ···);
Nach dem Login kopieren


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);
Nach dem Login kopieren


Das JavaScript-Fehlerüberwachungs-Plug-in von Fundebug überwacht das Ereignis unhandledrejection, also Unhandled Promise Fehler können automatisch erkannt werden.

rejectionhandled

Wenn ein Promise-Fehler zunächst nicht, aber später behandelt wird, wird das Ereignis rejectionhandled ausgelöst:

process.on(
'unhandledRejection', (reason, promise) => ···);
Nach dem Login kopieren

Dies event ist eine Instanz von PromiseRejectionEvent.

Beispielcode:

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



Unbehandelter Promise-Fehler in Node.js

Listening Das Ereignis unhandledRejection kann nicht behandelte Promise-Fehler erfassen:

Beispielcode:

Das obige ist der detaillierte Inhalt vonNicht behandelte Promise-Fehler abfangen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage