setTimeout でのエラー
.catch
はトリガされると思いますか?またその理由を説明できますか?
new Promise(function(resolve, reject) {
setTimeout(() => {
throw new Error("Whoops!");
}, 1000);
}).catch(alert);
解答: いいえ、実行されません:
new Promise(function(resolve, reject) {
setTimeout(() => {
throw new Error("Whoops!");
}, 1000);
}).catch(alert);
チャプターの中で言った通り、関数コードの周りには “暗黙の try..catch
” があります。そのため、すべての同期エラーは処理されます。
しかし、ここではエラーは executor が実行中でなく、その後に生成されます。したがって、promise はそれを処理できません。