new Promise(resolve=>{ setTimeout(()=>{ throw new Error("bye"); },2000); }) .then(value=>{ console.log(value+" world"); }) .catch(error=>{//实测发现这个函数并不会被执行 console.log("Error1: ",error.message); })
这里我特意把Error改成了Error1,因为代码报错本身就是显示:Error:bye的,我改成了Error1后还是显示Error:bye,我也添加了一些其他的输出语句,都不执行,由此可见,catch里面的函数不会执行
望解答
3.3错误处理一节,课程里讲的不对。 计时器里抛出的异常并不能被catch 捕获到。
new Promise((resolve,reject)=>{ setTimeout(()=>{ //此处抛出的异常是因为没有被捕获所以会在控制台被打印出来。 throw new Error("bye"); },2000); // throw new Error("bye2") //同步的方式执行会被promise处理成reject立即调用,可以被后面的catch捕获到 }) .then(value=>{ console.log(value+" world"); }) .catch(error=>{// //并没有执行 如果 console.log("Error1: ",error.message); })
new Promise(resolve=>{ setTimeout(()=>{ resolve("hello") },2000); }) .then(value=>{ throw new Error("bye"); console.log(value+" world"); }) .catch(error=>{//实测发现这个函数只会处理then中的错误,不能处理new Promise参数函数中的错误 console.log("Error1: ",error.message); })