为了账号安全,请及时绑定邮箱和手机立即绑定

Promise里在延时器里throw new Error,为什么不能被后面的reject回调或者

Promise里在延时器里throw new Error,为什么不能被后面的reject回调或者

慕慕森 2019-03-15 13:15:56
把throw new Error语句放延时函数里,只会报错,不执行reject函数或者catch函数var promise = new Promise((resolve, reject) => {    setTimeout(() => {        throw new Error('nono') //这里主动抛出错误    }, 500);})    .then(()=>{},(err)=>{        console.log(1) //这里是reject时应该调用的函数,但是这里并没有执行,只会在控制台报错        console.log(err) //根本不执行这里    })    .catch((err)=>{        console.log(2) //这里catch都不执行        console.log(err)    })而我不把throw new Error语句放延时函数里,就能在reject函数里执行var promise = new Promise((resolve, reject) => {    throw new Error('nono') //这里直接抛出错误,就能被后面的reject函数执行到})    .then(()=>{},(err)=>{        console.log(1) //这里就执行了        console.log(err)    })    .catch((err)=>{        console.log(2)        console.log(err)    })另外,不用throw new Error,而是直接reject(),不论是否放在延时函数里都能正常被捕获var promise = new Promise((resolve, reject) => {    setTimeout(() => {        reject('hehe')    }, 500);})    .then(()=>{},(err)=>{        console.log(1) //可以捕获        console.log(err)    })    .catch((err)=>{        console.log(2)        console.log(err)    })
查看完整描述

3 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

Promise没关系,异步错误 javascript 本来就捕获不到.
Promise只是一套处理异步逻辑的方案, 所以想用这套方案,就得按这套方案的规则写代码.

查看完整回答
反对 回复 2019-03-21
  • 3 回答
  • 0 关注
  • 1737 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号