きっかけ
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したりしてなかったから、かなりの時間をかけてしまった。
なるべく前提は悲観的にみないと、落とし穴を踏んだときに迷ってしまう。