为何await获取的是Promise的resolved值3而非已兑现状态的Promise?
为什么await后变量拿到的是Promise兑现值而非Promise对象?
先看这段代码:
function somePromise () { return new Promise (resolve => { setTimeout(() => { resolve (3) }, 3000) }) } async function solve() { console.log(1) let data = await somePromise(); console.log(2) console.log(data) } solve();
这段代码的输出为:
1
2
3
疑问:变量data的值为何是3,而非处于已兑现(fulfilled)状态的Promise对象?我原本预期data存储的是Promise对象,而非数字3。
解答
这就是await关键字的核心作用——它会暂停当前async函数的执行,等待右侧的Promise对象完成状态变更:
- 如果Promise兑现(fulfilled),
await会直接提取出Promise内部的兑现值,把这个值赋值给变量,而不是返回Promise对象本身。 - 如果Promise拒绝(rejected),则需要用
try/catch捕获对应的错误。
简单来说,let data = await somePromise() 等价于用then提取值的写法:
somePromise().then(value => { let data = value; // 后续console.log(2)等代码 });
await就是把Promise的异步操作做了“同步化”包装,让你不用写嵌套的回调,直接拿到最终结果。
内容的提问来源于stack exchange,提问作者Shivansh Raghav
相关产品推荐
相关产品推荐

