동기 에러는 **try/catch/finally**를 사용하며, 스택 트레이스를 얻기 위해 (문자열이 아니라) Error 객체를 throw해야 합니다.
js
{
data = .(input);
} (err) {
(err ) (err);
err;
} {
();
}
동기 에러는 **try/catch/finally**를 사용하며, 스택 트레이스를 얻기 위해 (문자열이 아니라) Error 객체를 throw해야 합니다.
{
data = .(input);
} (err) {
(err ) (err);
err;
} {
();
}
// async/await → await를 try/catch로 감싼다
async function load() {
try {
return await fetch(url).then(r => r.json());
} catch (err) { showError(err); }
}
// promise → .catch 사용
fetch(url).then(use).catch(showError);
try {
setTimeout(() => { throw new Error("boom"); }, 0); // ❌ 잡히지 않음
} catch (e) { /* 절대 실행 안 됨 — throw는 나중에, 이 스택 밖에서 발생 */ }
setTimeout 콜백은 나중 틱에 실행되므로, 둘러싼 try는 이미 사라진 지 오래입니다. 에러는 콜백 내부에서 처리하세요.
window.addEventListener("unhandledrejection", e => log(e.reason)); // 브라우저
process.on("unhandledRejection", err => log(err)); // Node
instanceof 검사를 위해 Error(또는 커스텀 서브클래스)를 throw하세요.catch (e) {}). 항상 로깅하거나 다시 throw하세요.