バージョン7のNode.jsには、約束を処理するためのasync/await構文シュガーがあり、私のコードでは次のような警告が頻繁に発生します。
(node:11057) UnhandledPromiseRejectionWarning: Unhandled promise
rejection (rejection id: 1): ReferenceError: Error: Can't set headers
after they are sent.
(node:11057) DeprecationWarning: Unhandled promise rejections are
deprecated. In the future, promise rejections that are not handled
will terminate the Node.js process with a non-zero exit code.
残念ながら、キャッチが欠けている行への参照はありません。すべてのtry/catchブロックをチェックせずにそれを見つける方法はありますか?
listen unhandledRejection
プロセスのイベント。
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
// application specific logging, throwing an error, or other logic here
});
未処理のES6 Promise拒否に対する完全なスタックトレースを表示する correct の方法は、--trace-warnings
フラグを付けてNode.jsを実行することです。これはあなた自身のコードの中から拒絶を傍受する必要なしに、あらゆる警告に対する完全なスタックトレースを表示します。例えば:
node --trace-warnings app.js
trace-warnings
フラグが の前に来ることを確認してください あなたの.js
ファイルの名前!それ以外の場合、フラグはスクリプトの引数として解釈され、Node.js自体によって無視されます。
実際に handle 未処理の拒否をしたい場合(例えばそれらをログに記録することによって)、代わりにmy unhandled-rejection
モジュールを使用することをお勧めします。単一のイベントハンドラで.
このモジュールは、Bluebird、ES6 Promises、Q、WhenJS、es6-promise
、then/promise
、および未処理の拒否仕様のいずれかに準拠したもの(ドキュメントの全詳細)をサポートしています。
スタックトレースによるロギング
もっと役に立つエラーメッセージを探しているなら。これをあなたのノードファイルに追加してみてください。クラッシュが発生している場所のフルスタックトレースが表示されます。
process.on('unhandledRejection', (error, p) => {
console.log('=== UNHANDLED REJECTION ===');
console.dir(error.stack);
});