You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遭遇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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:59:19