如何获取并存储JavaScript Promise resolve后返回的结果值
问题1解答
Promise的状态变更和回调执行遵循JS事件循环的调度规则:
- 即使
Promise.resolve("Passed")是已完成状态的Promise,调用.then()后返回的新Promisex的状态更新逻辑,会被推入微任务队列等待执行 - 你写的
console.log(x)属于主线程同步任务,会优先于所有微任务执行,此时x的状态更新逻辑还没触发,所以打印结果是Promise { <pending> } setTimeout属于宏任务,触发时机晚于所有同步任务、微任务执行完毕,此时x的状态已经更新为完成,所以能打印出携带返回值的Promise对象。
问题2解答
Promise的返回值无法在同步上下文中直接取出,只能在异步回调中获取,有两种常用写法:
方法1:链式调用.then()处理
直接在.then()的回调函数内部操作返回值:
let p = Promise.resolve("Passed") p.then(msg => { // 此处的msg就是你要取的"Passed",所有需要用到该值的逻辑都可以在这里写 console.log(msg) }).catch(err => console.log(err))
方法2:用async/await语法糖简化写法
在async标记的函数内部使用await等待Promise完成,直接拿到返回值:
let p = Promise.resolve("Passed") async function handleResult() { const msg = await p // 此处的msg就是"Passed" console.log(msg) } handleResult()
内容的提问来源于stack exchange,提问作者KHAN
相关产品推荐
相关产品推荐

