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
相关产品推荐
相关产品推荐

