Heim  >  Artikel  >  Web-Frontend  >  Promise wird asynchron implementiert

Promise wird asynchron implementiert

php中世界最好的语言
php中世界最好的语言Original
2018-04-17 16:03:151515Durchsuche

Dieses Mal bringe ich Ihnen das Versprechen, eine asynchrone Implementierung zu implementieren. Was sind die Vorsichtsmaßnahmen für das Versprechen, eine asynchrone Implementierung zu implementieren? Das Folgende ist ein praktischer Fall.

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 der Fehler nicht mit der Catch-Methode erfasst wird, wird der ausgegebene Fehler nicht behandelt, wenn die Funktion asyncFunc() ihn ablehnt.

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

Node.js abfangen.

Unbehandelter Promise-Fehler im Browser

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

unbehandelte Ablehnung

Hören Sie sich das unhandledrejection

-Ereignis an, um nicht behandelte Promise-Fehler zu erfassen:

window.addEventListener('unhandledrejection', event => ···);
Bei diesem Ereignis handelt es sich um eine PromiseRejectionEvent-Instanz, die über die beiden wichtigsten

-Attribute verfügt:

Versprechen: Versprechen ablehnen

Grund: Ablehnungswert des Versprechens

Beispielcode:

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

JavaScript-Fehlerüberwachungs-Plug-in von Fundebug lauscht auf das unhandledrejection-Ereignis, sodass es automatisch unbehandelte Promise-Fehler erfassen kann.

Ablehnung behandelt

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

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

Dieses Ereignis ist eine Instanz von PromiseRejectionEvent.

Beispielcode:

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

Unbehandelter Promise-Fehler in Node.js

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

Process.on('unhandledRejection', (Grund, Versprechen) => ···);

Beispielcode:

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

Hinweis: Node.js v6.6.0+ meldet standardmäßig nicht behandelte Promise-Fehler, daher ist es in Ordnung, das unhandledrejection-Ereignis nicht abzuhören.

Das Node.js-Fehlerüberwachungs-Plug-in von Fundebug lauscht auf das unhandledRejection-Ereignis, sodass es automatisch unbehandelte Promise-Fehler erkennen kann.

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:



Das obige ist der detaillierte Inhalt vonPromise wird asynchron implementiert. 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