0

0

怎样处理错误_javascript中trycatch如何工作【教程】

幻影之瞳

幻影之瞳

发布时间:2026-01-24 16:30:02

|

419人浏览过

|

来源于php中文网

原创

try...catch只捕获同步运行时异常,不捕获语法错误、事件回调、宏/微任务及未await的Promise拒绝;async/await中需await Promise才能使reject被catch捕获。

怎样处理错误_javascript中trycatch如何工作【教程】

try...catch 不会捕获语法错误,只捕获运行时异常;异步代码(如 setTimeoutfetch)中的错误默认逃逸出 try 块,必须单独处理。

try...catch 能捕获哪些错误

它只捕获同步执行过程中抛出的 Error 实例或任意值(比如 throw "oops"),但对以下情况完全无效:

  • 语法错误(如少括号、let x = ;),这类在解析阶段就报错,根本进不了 try 块
  • 事件回调里的错误(button.addEventListener('click', () => { throw new Error(); })
  • 宏任务和微任务中的错误(setTimeoutPromise.thenqueueMicrotask
  • 未捕获的 Promise 拒绝(Promise.reject() 且没接 .catch()

async/await 中 try...catch 的写法要点

async 函数包装后,await 后的 Promise 拒绝会被转为同步异常,这时 try...catch 才真正生效:

async function loadData() {
  try {
    const res = await fetch('/api/data');
    if (!res.ok) throw new Error(`HTTP ${res.status}`);
    return await res.json();
  } catch (err) {
    // 这里能捕获 fetch 失败、JSON 解析失败、手动 throw 的错误
    console.error('加载失败:', err.message);
  }
}
  • 必须 await 被 reject 的 Promise,否则它只是个 pending 状态,不会触发 catch
  • fetch 成功返回 Response 对象不等于请求成功,res.okres.status 需手动检查
  • 不要在 await 前加括号误写成 await (fetch().then(...)),这会丢失错误传播链

错误对象里真正有用的信息

别只打印 err.message,很多上下文藏在其他属性里:

蕉点AI
蕉点AI

AI电商商品图生成平台 | 智能商品素材制作工具

下载

立即学习Java免费学习笔记(深入)”;

  • err.name:标准错误类型名("TypeError""SyntaxError" —— 但注意:语法错误根本进不了 catch)
  • err.stack:调用,含文件名和行号(开发环境有效,生产环境可能被压缩)
  • err.cause(ES2022+):嵌套错误的原始原因,适合链式错误包装
  • 自定义错误可添加任意字段,比如 err.code = 'NETWORK_TIMEOUT',便于分类处理

常见漏网之鱼:全局错误监听补位

对于 try...catch 顾不到的地方,得靠全局钩子兜底:

window.addEventListener('error', (e) => {
  console.error('JS 错误:', e.error); // 同步错误
});

window.addEventListener('unhandledrejection', (e) => {
  console.error('未处理 Promise 拒绝:', e.reason); // Promise.reject() 未被捕获
});
  • 这两个监听器不能替代 try...catch,它们没有恢复执行的能力,仅用于日志和监控
  • unhandledrejection 在 Promise 链末尾没写 .catch() 时触发,但一旦写了,就不会冒泡到这里
  • Node.js 环境对应的是 process.on('uncaughtException')process.on('unhandledRejection')

最常被忽略的是:错误处理不是“加个 try 就完事”,关键在判断哪里真需要同步捕获、哪里该用 Promise 链式处理、哪些必须交由全局监听——混用或漏掉任一环节,错误就会静默消失。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

188

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

291

2023.10.25

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

394

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

574

2023.08.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

510

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

244

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

278

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

5299

2023.08.17

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号