遭遇UnhandledPromiseRejection错误,求JavaScript解决方案
解决UnhandledPromiseRejection错误:未处理的Promise拒绝问题
你遇到的ERR_UNHANDLED_REJECTION错误,核心原因是:代码中创建的Promise被拒绝了(因为inventory.sunglasses的值为0,触发了reject('That item is sold out.')),但你没有为这个Promise添加任何处理拒绝状态的逻辑,导致运行环境无法处理未捕获的拒绝。
两种解决方法:
方法1:使用.then() + .catch()链式调用
这是处理Promise的基础方式,通过.then()处理成功(resolve)的结果,.catch()捕获并处理失败(reject)的错误:
const inventory = { sunglasses: 0, pants: 1088, bags: 1344 }; const myExecutor = (resolve, reject) =>{ if(inventory.sunglasses > 0){ resolve('Sunglasses order processed.'); }else{ reject('That item is sold out.'); } } const orderSunglasses = () => { return new Promise(myExecutor); } // 添加.then和.catch处理Promise状态 const orderPromise = orderSunglasses(); orderPromise .then(successMsg => console.log(successMsg)) .catch(errorMsg => console.log(errorMsg));
方法2:使用async/await + try/catch
这是ES8引入的更简洁的异步处理方式,逻辑更接近同步代码,适合新手理解:
const inventory = { sunglasses: 0, pants: 1088, bags: 1344 }; const myExecutor = (resolve, reject) =>{ if(inventory.sunglasses > 0){ resolve('Sunglasses order processed.'); }else{ reject('That item is sold out.'); } } const orderSunglasses = () => { return new Promise(myExecutor); } // 用async函数包裹,通过try/catch处理状态 async function handleOrder() { try { const successMsg = await orderSunglasses(); console.log(successMsg); } catch (errorMsg) { console.log(errorMsg); } } handleOrder();
补充说明
Promise有三种状态:pending(等待中)、fulfilled(已成功)、rejected(已失败)。当Promise状态变为rejected时,必须通过.catch()或try/catch捕获错误,否则运行环境会抛出未处理拒绝的错误。你原来的代码只是打印了Promise对象本身,并没有处理它的状态变化,因此触发了报错。
内容的提问来源于stack exchange,提问作者Jerry S. Nawerth
相关产品推荐
相关产品推荐

