未処理の Promise エラーは、unhandledrejection イベントをリッスンすることで捕捉できます。
読みやすさを確保するために、この記事は直訳ではなく意訳を使用し、ソースコードは大幅に変更されています。また、この記事の著作権は原著者に帰属し、翻訳は学習のみを目的としています。
Promiseを使用して非同期コードを作成する場合は、rejectを使用してエラーを処理します。場合によっては、開発者は通常これを無視し、その結果、一部のエラーが処理されないことがあります。例:
function main() { asyncFunc() .then(···) .then(() => console.log('Done!')); } ログイン後にコピー |
catchメソッドはエラーをキャッチするために使用されないため、asyncFunc()関数rejectを実行する場合、スローされたエラーは処理されません。
このブログでは、ブラウザと Node.js でそれぞれ未処理の Promise エラーを捕捉する方法を紹介します。
一部のブラウザ (Chrome など) は、未処理の Promise エラーをキャッチできます。
未処理の Promise エラーをキャプチャするには、unhandledrejection イベントをリッスンします:
window.addEventListener( 'unhandledrejection', event => ···); ログイン後にコピー |
このイベントは PromiseRejectionEven 例として、これには 2 つの最も重要なプロパティがあります:
promise
: Promise を拒否しますpromise
: reject的Promise
reason
reason
: Promise の拒否値window.addEventListener('unhandledrejection', event => { console.log(event.reason); // 打印"Hello, Fundebug!" }); function foo() { Promise.reject('Hello, Fundebug!'); } foo(); ログイン後にコピー |
ファンデバグさんJavaScript エラー監視プラグインは
rejectionhandled
Promise エラーが最初は処理されず、後で処理されると、このイベントは
PromiseRejectionEvent のインスタンスです。
。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); ログイン後にコピー |
Node.jsのUnhandled Promiseエラー
UnhandledRejection以上が未処理の Promise エラーをキャッチするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。