关于async里面try/catch的一个问题
发布于 8 年前 作者 yviscool 7133 次预览 最后一次回复是 8 年前 来自 问答
function foo(){ throw new Error('zjl')}
function*fn(){
try{
yield foo();
}catch(e){
console.log(e)
}
}
上面会被caty/catch ,而下面这个Promise就不会被try/catch
function * fn(){
yield Promise.reject('ixl')
}
//执行next后,会报错.
function *fn(){
try{
yield Promise.reject('ixl')
}catch(e){
console.log(e)
}
}
//也会报错
而async里面,我看了下对await进行try/catch 可以避免 处于rejected状态的promise跳出async函数 怎么做到的?
7 回复
没有谁说过 yield 后能捕捉到 promise 的 reject 错误吧…
你肯定是被 co 库误导了,co 执行 generator 能用 try catch 捕获是因为它做了特殊处理,简单的说就是 reject 后会 throw 出异常
原生 generator 可不自带這個功能喔
来自酷炫的 CNodeMD
@hyj1991 还有个问题,
也就说外面的catch会先于里面的catch?
@5196666qwe 没看明白你说的外面和里面指的是啥,但是这段代码流程一定是这样:
@hyj1991 外面是 fn generator里的try/catch ,里面是 onreject里面的try/catch,而我实验过了,把fn里面的try/catch去掉了,下面的try/catch是会执行的。。。
@5196666qwe 那必须啊,我说的无所谓是因为你在 generator 里面 try 了,要是 generator 里面没 try,那这个错误肯定会继续向外抛出呀
@hyj1991 懂了,谢谢解答
来自酷炫的 CNodeMD
@5196666qwe 不客气哇