Async/await行为疑问:为何调用async函数返回Promise {<pending>}?
为什么调用async函数会输出Promise {}?
这事儿其实很好理解,核心就在于async函数的本质和你两种调用方式的区别:
1. async函数的返回值永远是Promise对象
不管你在async函数里return了什么值,JavaScript都会自动把这个值包装成一个Promise实例返回给你。当你直接执行console.log(data1())时,data1刚执行到await server.fetch(...)这一步——它还在等着服务器返回结果呢,此时这个Promise还处于**pending(等待)**状态,所以控制台就会输出Promise {<pending>}。
2. 两种写法的核心差异
- 第一种写法里,你只是让async函数返回了一个未完成的Promise,却没有等待它完成就直接打印了。这就像你刚下单点了外卖,还没等骑手送到就去看餐盒,那肯定是“待送达”状态呀。
- 第二种写法里,你在async函数内部用
await等待了server.fetch的Promise完成,拿到最终的res之后才打印,所以自然能看到响应结果。
如果你想在第一种写法里拿到结果怎么办?
要是你想保留data1返回结果的逻辑,又要打印出最终值,有两种常用方式:
方式一:用.then()处理Promise
const data1 = async () => { const res = await server.fetch({ query: LISTINGS }); return res; }; data1().then(res => console.log(res));
方式二:在另一个async函数里用await
const data1 = async () => { const res = await server.fetch({ query: LISTINGS }); return res; }; // 立即执行的async函数 (async () => { const finalRes = await data1(); console.log(finalRes); })();
内容的提问来源于stack exchange,提问作者pasindu229
相关产品推荐
相关产品推荐

