TypeScript Meetup#4
Async Function and Runtime Error Tracking by lacolaco-san
- async/awaitをES2015にcompileすると、__awaiterという実装に置き換えられる。
- これは、各xx.jsファイルごとに作成されるので、最終成果物の中に重複が生じる。
- tslibというランタイムライブラリを使うと、これをimport awaiter from tslibに置換できて、重複を回避できる。
- この時、もしasync/awaitで受け取ったエラーをre-throwしているといくつか問題が起きる。
- 1つは、Promiseを返すawaiterの中でスローされることでerrorがPromiseのrejectに変わり、UnhandledRejectionになってしまうこと。これはErrorとは別のイベントになる。
- もう1つは、ブラウザで表示する時tslibのawaiterを通るのでスタックトレースのレイヤーが深くなってしまうこと。
- 結論として、tslibは重複回避できるので条件に合うときは使うといいが、エラーをリスローするのは避けたほうが良いかもしれない。