课程
下载APP
源自:-

catch里面的函数不会执行

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里面的函数不会执行

望解答

提问者:weixin_慕用1009347 2018-11-23 17:58

2个回答

  • weixin_慕用1009347
    2018-11-23 18:32

    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);
    })


  • 董曼巴
    2019-08-26 11:13

    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);
    })