asyncの中でだけ、try-catchがrejectedされたPromiseをcatchできる理由がわからない。
asyncの挙動について、MDNのドキュメントだけでは分からなかったので教えてください。
例えば、以下の try-catchはPromiseのrejectをcatchしません。
try {
(async () =>{
await Promise.reject()
})()
}catch (e){
console.log('ERROR!', e) // これは出力されない。代わりに...
/*
(node:66365) UnhandledPromiseRejectionWarning: undefined
(node:66365) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:66365) [DEP0018] 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ブロックをasyncの内側に持ってくるとcatchします。
(async () =>{
try {
await Promise.reject()
}catch (e){
console.log('ERROR!', e) //これが出力される
}
})()
どのようにしてこの違いが生まれるのかご教示いただけないでしょうか。
参考になる考え方、資料でも結構です。よろしくお願いいたします。