try catch 捕获异步的问题
场景:最近在做表单验证 发现了很多的form表单验证的时候很多都是采用的异步捕获?我依稀记得try catch 是捕获同步代码的错误机制,为什么可以捕获到异步的操作;以下是截取antDesign一段伪代码:
可以参考 下方的伪代码:
const result = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject('我是错误')
}, 1000)
})
}
async function foo () {
try{
const m = await result()
}catch(error){
console.log(error,'9999')
}
};
foo()
问题:为什么可以捕获?这其中的原理是什么?是否只要带上await 的语法糖都是用try catch 进行捕获?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
try catch
能捕获async
函数中await的异步异常,是基于类es6generator
生成器函数的调度机制。除开async await是一些现代浏览器或者高版本node已经原生支持的不说。可以通过babel 将async await 编译成es5来透析它的ployfill实现。generator主要是两种调度类型,
next
跟throw
generator上有一个throw就是原声的throw方法eg. 在https://babeljs.io/repl将以下代码转换,然后自行断点调试
就是语言本身的能力啊
在async function里try await的promise,就能把promise的异常捕获了