edgex
异常第一次被捕获,就不会再被捕获了,类似Java机制
new Promise((resolve, reject) => {
setTimeout(() => { reject('bye') }, 2000)
})
.then(
value => { console.log(value); },
error => {
console.log("error:" + error)
})
.catch(error => { console.log("catch:" + error); })
Keyro
第二种方法不行,老师讲的有错,你运行下我下面的代码,throw 出来的错误没有被catch捕获到:
console.log('here we go');new Promise((resolve)=>{ setTimeout(()=>{ throw new Error('bye'); },2000);}).then((value)=>{ console.log(val + 'world');}).catch((error)=>{ console.log('Error---------------', error.message);});
南极科考队
楼上已经回答了,我也说一下关于 throw new Error('error')的看法:
如果不是放在定时器里面,后面的catch可以捕获到;
2.如果放在定时器里面(又或者跟之前的课程一样放在一个立即执行函数里面),后面的catch就捕获不到了,不过全局window.onerror可以捕获到。
综上,本质是函数是否进入同一个执行栈,从而影响后续的捕获。