俺、サービス売って家買うんだ

Swift, Kotlin, Vue.js, 統計, GCP / このペースで作ってればいつか2-3億で売れるのがポっと出来るんじゃなかろうか

どこで起こったかわからない unhandledRejection のコールスタックをキャプチャする

f:id:ie-kau:20161103231112p:plain

すいませんorz...

2017年後半〜2018年前半ブチクソ忙しくて全くブログの更新ができていませんでした!!!!!!!

facebookとかではちまちま発言してるのですが、会社でのサービスづくりに熱中しておりこちら側がおろそかになっていました。
そろそろ復活させるぞ!!!!

ということで復帰記事ですが完全メモ書きです。

Node / Expressでサーバーを運用していると↓みたいな感じで try catch せずに投げ捨てた非同期処理内でエラーを起こしてしまい UnhandledPromiseRejectionWarning が出力されただけで、どこでエラーが発生したかよくわからない状態になってしまうことがあります。

(node:15344) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 10): ReferenceError: hoge is not defined

これでいうと hogeの ReferenceErrorどこでおこっとるんや!!と。

そういうときは、

process.on('unhandledRejection', (reason, p) => {
    console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
})

上記のように、unhandledRejection のイベントをキャプチャしておけば

Unhandled Rejection at: Promise Promise {
  <rejected> ReferenceError: hoge is not defined
    at type (/home/develop/fugafuga.js:725:18)
    at router.post (/home/develop/routes/hogehoge.js:500:7)
    at <anonymous> } reason: ReferenceError: hoge is not defined
    at type (/home/develop/fugafuga.js:725:18)

という感じでコールスタックを取得することがでるようです。