把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只是一套处理异步逻辑的方案, 所以想用这套方案,就得按这套方案的规则写代码.
添加回答
举报
0/150
提交
取消
