Heim  >  Artikel  >  Web-Frontend  >  Nicht behandelte Promise-Fehler abfangen

Nicht behandelte Promise-Fehler abfangen

一个新手
一个新手Original
2017-10-13 09:21:232094Durchsuche

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!'));
}

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 => ···);


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


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

  • promise: Ablehnungsversprechen

  • reason: Der Ablehnungswert von Versprechen

Beispielcode:

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


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);


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) => ···);

Dies event ist eine Instanz von PromiseRejectionEvent.

Beispielcode:

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



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!

Stellungnahme:
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