try……catch的异常捕获机制
参考文章(本博文前部分是这篇博客复制过来的,已验证其正确性):
https://blog.csdn.net/weixin_39850143/article/details/111346809
一,try,catch的运行机制
当程序运行到try catch里面时,如果未报错,则忽略catch中的代码,若报错,则不执行try报错内容后面的代码,转而执行catch中的代码。
二,什么时候try catch 才能捕获到异常?
能捕捉到的异常必须是线程执行已经进入 try catch 但 try catch 未执行完的时候抛出来的
1,当语法错误时,不能捕获
因为语法错误是在语法检查阶段就报错了,线程执行尚未进入 try catch 代码块,自然就无法捕获到异常。
例如:
try{a.
}catch(e){console.log("error",e);
}
// output
Uncaught SyntaxError: Unexpected token '}'
2,语法正确,线程进入try catch中时,可以捕获
function d(){a.b;}
try{d();
}catch(e){console.log("error",e);
}
// output
error ReferenceError: a is not defined
代码执行进入了 try catch ,执行 d() 方法的时候,线程执行处在 try 里面,所以能捕捉到。
3,异步无法捕获
try{setTimeout(()=>{console.log(a.b); }, 100)
}catch(e){console.log('error',e);
}
console.log(111);
//output
111
Uncaught ReferenceError: a is not defined
因为,setTimeout是异步函数,而try catch其实是同步顺序执行的代码,等setTimeout里面的事件进入事件队列的时候,主线程已经离开了try catch,所以try catch是无法捕获异步函数的错误的。
4,promise对象无法捕获
事实上,Promise 的异常都是由 reject 和 Promise.prototype.catch 来捕获,不管是同步还是异步,try catch 无法捕捉 Promise 的异常,是因为 Promise 的异常没有往上抛。
也就是说,try catch无法捕获promise对象的错误。
那我们平时如何捕获promise的错误呢?使用await!将代码执行停留在 try catch 代码块里面。增加这个关键字之后,就把promise对象resolve成结果了,不再是promise对象。并且在try catch中,于是才可以捕获到错误。
例如:
try……catch的异常捕获机制相关推荐
- 用c实现跨平台异常捕获机制
为什么80%的码农都做不了架构师?>>> TBOX封装了一套跨平台的异常捕获实现,来模拟windows的seh异常处理功能,而且是线程安全的. 在linux/mac下的实现 使 ...
- 用c实现跨平台异常捕获机制 1
TBOX封装了一套跨平台的异常捕获实现,来模拟windows的seh异常处理功能,而且是线程安全的. 在linux/mac下的实现 使用signal 捕获异常信号 使用sigsetjmp保存现场寄存器 ...
- 【C语言基础】C语言异常捕获机制 - assert
C语言异常捕获机制 - assert 快速入门 想快速入门该模块请访问:介绍,数据接口,示例代码 介绍 通常一个良好的代码功能运行环境都有功能运行前检查和运行后检查两个方面.C语言中提供了assert ...
- 【C语言基础】C语言异常捕获机制 - setjmp
C语言异常捕获机制 - setjmp 快速入门 想快速入门该模块请访问:介绍,数据接口,示例代码 介绍 C语言没有C++或Java的异常捕获机制,但可以通过setjmp/longjmp实现类似的效果: ...
- Try Catch C++ 异常捕获
Try Catch C++ 异常捕获 参考文章: (1)Try Catch C++ 异常捕获 (2)https://www.cnblogs.com/0523jy/p/11367831.html 备忘一 ...
- 从源码角度分析Android系统的异常捕获机制是如何运行的
我们在开发的时候经常会遇到各种异常,当程序遇到异常,便会将异常信息抛到LogCat中,那这个过程是怎么实现的呢? 我们以一个例子开始: import android.app.Activity; imp ...
- 简单介绍Go语言错误处理异常捕获+异常抛出
这篇文章主要介绍了Go语言错误处理异常捕获和异常抛出,Go语言的作者认为java等语言的错误处理底层实现较为复杂,就实现了函数可以返回错误类型以及简单的异常捕获,虽然简单但是也非常精妙,大大的提高了运 ...
- springboot上传文件及文件上传限制大小异常捕获
一个简单的页面上传文件,上传的接口是/upload,请求方法是post,enctype(表单类型)是multipart/form-data <!DOCTYPE html> <html ...
- 《SpringBoot从菜鸟到老鸟》之SpringBoot 如何配置全局的异常捕获
SpringBoot 如何配置全局的异常捕获 SpringBoot中自带的异常捕获机制返回的默认页面比较丑,对用户来说不够人性化. 所以这篇文章来讲解SpringBoot钟自定义全局异常捕获. 主要讲 ...
- SpringBoot配置全局异常捕获
SpringBoot中自带的异常捕获机制返回的默认页面比较丑,对用户来说不够人性化.所以这篇文章来讲解SpringBoot钟自定义全局异常捕获. 本文的源码已经上传GitHub:https://git ...
最新文章
- 目标文件中的几个重要的段
- 11、Java Swing JList:列表框组件
- C语言学习之求S=a+aa+aaa+... +aa.....aa之值,其中a是一个数字,n表示a的位数.
- 计算机安全模型研究与应用,软件哨兵安全动态检测模型的研究与实现-计算机应用研究.PDF...
- 网络访问保护(NAP)技术之详解
- Linux下的Python Socket网络编程(聊天机器人)
- Android开发一个简单的交互式App
- gitlab-runner错误之:New runner. Has not connected yet(runner注册成功到了gitlab,但是前面的图标是灰色三角形)
- 苹果2021新品发布会,iMac全新设计你GET到了吗
- 阿里arouter框架使用
- ps 的一些常见的键位技巧
- Win flex-bison 的简单使用
- 如何应对云安全技术遇到的挑战?可从这三点入手
- C#中Array类精讲
- 自定义View之仿淘宝详情页
- EXCEL拼接SQL脚本
- 2.2.2 定点数的移位运算
- python怎么安装setuptools_如何安装setuptools?
- 20本最好的免费的Python书籍
- GIS类发明专利的总结
热门文章
- 485.最大连续1的个数(力扣leetcode) 博主可答疑该问题
- 215.数组中第的K个最大元素(力扣leetcode) 博主可答疑该问题
- c#halcon 联合编程经验总结
- 感知器、logistic与svm 区别与联系
- 《转》python学习(3)
- Freebsd-9.0 how to change default sound device
- 五个最佳RSS新闻阅读器
- .Net Remoting与Web Service
- 【转载】一些重要的java知识点:JVM内存模型和结构
- Spring Cloud整合Seata实现2PC二阶段分布式事务