エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

Promise内のUncaughtで困った話

きっかけ

Promise内で、Uncaughtが発生している箇所があったが、ログ追ってもなかなかそこまでたどり着けなかったので晒す。

原因事象

ごめんなさい。。。JS詳しくないので、Typescriptです。。。

class Test {
    get(): Promise<{}> {
        return new Promise(() => {
            var a;
            a.test();
            console.log("test");
        })
    }
}

new Test().get().then(() => {
    return new Promise(() => console.log("fire!"));
}).catch((err) => console.log("error", err));

やっていることはもっと複雑だけど、だいたい似たような感じ

実行結果

実行すると、"fire!"まで出力されずに、"error"が出力される。
特にrejectしている感覚はないが、catch句まで飛んでしまうため、原因究明まで相当時間がかかった。

どうすればよかったか

Typescriptだから、発生しないはずって思い込んでしまっていたのが、そもそも間違いだった。
原因がわからなかったら、Uncaughtの可能性も含めてログ調査する。
ログ調査も"Uncaught"を考慮してgrepしたりしてなかったから、かなりの時間をかけてしまった。
なるべく前提は悲観的にみないと、落とし穴を踏んだときに迷ってしまう。