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

Promise被拒绝时await无法将数据存入变量的问题求助

解决async/await中Promise拒绝时无法获取值的问题

你遇到的问题本质是await的行为特性——当它等待的Promise被reject时,不会把reject的值赋值给变量,而是直接抛出异常,让async函数返回的Promise进入rejected状态,所以你原代码里let myprom = await myPromise后面的代码根本不会执行,直接跳转到外层的错误处理逻辑。

要在两种状态下都能获取对应的值,用try/catch块包裹await代码即可,把reject的情况捕获到catch里,就能将值存入变量:

async function umar() {
  let somevar = false;
  let myPromise = new Promise((resolve, reject) => {
    if (somevar === true) {
      console.log('I am resolved');   
      resolve('resolved')
    } else {
      console.log('I am rejected.')
      reject('rejected')
    }
  })
  
  let myprom;
  try {
    // Promise resolve时,拿到resolve的值
    myprom = await myPromise;
    console.log(myprom);
  } catch (err) {
    // Promise reject时,err就是reject传入的值
    myprom = err;
    console.log(myprom);
  }
  
  return myprom;
}

let a = umar()
a.then((value)=>{
  console.log(value)
},()=>{console.log('I got an error.')})

逻辑说明

  • 提前声明myprom变量,避免块级作用域导致的变量无法访问问题
  • try块处理Promise resolve的情况,正常赋值并打印
  • catch块捕获reject抛出的异常,将异常值赋值给myprom,确保两种状态下变量都有对应值
  • 最终async函数返回的Promise会处于resolved状态,外层then的第一个回调会拿到返回值

内容的提问来源于stack exchange,提问作者Umar Hashmi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:30:50