lunchTime为true时Promise仍进入catch分支报错问题求助
问题根因
你的代码存在3个核心问题,导致始终进入catch分支:
- 语法错误:Promise构造函数的参数回调额外多写了一个闭合大括号,代码执行时直接抛出语法异常被catch捕获
- then回调未声明形参接收resolve传递的lunch对象,且直接访问了作用域不存在的
resolve变量,触发ReferenceError被catch捕获 - catch回调未接收reject抛出的错误对象,而是主动新建了Error实例输出,掩盖了实际报错原因
修正后代码
const lunchTime = true; function orderMeSomeFood() { return new Promise((resolve, reject) => { if (lunchTime === true) { let lunch = { food: "BBQ", drink: "Zen WTR" }; resolve(lunch); } else if (lunchTime === false) { const err = new Error('OOOOOPs') reject(err); } }) }; orderMeSomeFood().then((lunch) => { // 接收resolve返回的lunch对象 console.log(lunch); }).catch((err) => { // 接收reject抛出的错误对象 console.log(err); })
运行效果
- 当
lunchTime = true时,控制台输出:{ food: 'BBQ', drink: 'Zen WTR' } - 当
lunchTime = false时,控制台输出:Error: OOOOOPs
内容的提问来源于stack exchange,提问作者Wayne
相关产品推荐
相关产品推荐

