JavaScript错误处理分同步和异步两类:同步错误用try...catch捕获,异步错误需用.catch()、async/await+try...catch或全局unhandledrejection/error事件处理,关键在于捕获位置准确。

JavaScript 错误处理主要分同步和异步两类:同步错误用 try...catch 捕获,异步错误(尤其是 Promise)需结合 .catch()、async/await + try...catch 或全局钩子来处理。关键不是“能不能捕”,而是“在哪儿捕”——位置错了,错误就漏掉了。
try...catch 只能捕获**同步执行过程中抛出的错误**(比如 throw new Error()、类型错误、引用错误等),不能捕获异步回调里的错误(如 setTimeout 里抛错)。
try 块中,比如 JSON 解析、对象属性访问、函数调用catch 参数是错误对象,可访问 message、name、stack 等属性finally 块,无论是否出错都会执行,适合清理资源示例:
try {
const data = JSON.parse('{"name": "Alice",'); // 缺少 }
} catch (err) {
console.error('JSON 解析失败:', err.message); // SyntaxError: Unexpected end of JSON input
}Promise 链中的错误不会冒泡到外层 try...catch,必须显式处理。两种主流方式:
立即学习“Java免费学习笔记(深入)”;
.catch():接在 .then() 后,捕获前面任意环节的 reject 或 throwasync/await + try...catch:让异步代码写得像同步,错误可被直接捕获注意:未被 .catch() 或 try...catch 处理的 Promise rejection 会触发 unhandledrejection 事件(可在全局监听)。
示例(推荐 await 方式):
async function fetchUser() {
try {
const res = await fetch('/api/user');
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const user = await res.json();
return user;
} catch (err) {
console.error('获取用户失败:', err.message);
}
}用于捕获漏掉的 Promise 错误和全局同步错误(如脚本加载失败、语法错误),适合日志上报或友好的错误提示:
window.addEventListener('unhandledrejection', e => { ... }):捕获未处理的 Promise rejectionwindow.addEventListener('error', e => { ... }):捕获未被捕获的同步错误(如 <script></script> 加载失败、全局作用域 throw)注意:error 事件不捕获 Promise 错误,unhandledrejection 不捕获同步错误,两者互补。
try...catch 就以为万事大吉——异步操作必须在对应上下文中处理catch(即 catch(e) {}),至少记录错误,否则问题会静默消失.catch(),否则算未处理async/await 时,try 必须包裹整个 await 表达式,不能只包 await 后面的部分错误处理不是加一堆 try 就完事,而是理解执行模型、明确错误发生的位置,再选择合适的捕获时机和方式。不复杂但容易忽略。
以上就是javascript怎样进行错误处理_trycatch和Promise错误如何捕获的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号