使用async/await时Promise未解析:为何返回Promise而非实际数据
为什么async函数返回Promise而不是实际数据?
嘿,这个问题其实是async函数的核心特性之一,咱们一步步来理清楚~
首先,所有async函数的返回值都会被自动包装成一个Promise对象,哪怕你return的是普通值或者已解析的Promise,它都会帮你再包一层。所以你直接console.log(fetchData())的时候,打印的肯定是这个还没完成的Promise,而不是里面的data。
要拿到你期望的[{userId: 1, name: 'ss'}]这类实际数据,你有几种常见的解决方案:
方案1:使用.then()链式调用处理Promise
var a = 'https://jsonplaceholder.typicode.com/posts'; async function fetchData() { const response = await fetch(a); const data = await response.json(); return data; } // 通过.then()获取Promise resolved后的结果 fetchData().then(data => { console.log(data); });
方案2:在另一个async函数中使用await调用
var a = 'https://jsonplaceholder.typicode.com/posts'; async function fetchData() { const response = await fetch(a); const data = await response.json(); return data; } // 定义一个新的async函数来执行await操作 async function logFetchedData() { const result = await fetchData(); console.log(result); } logFetchedData();
方案3:使用立即执行的async函数表达式
如果你不想额外定义函数,可以用这种更简洁的写法:
var a = 'https://jsonplaceholder.typicode.com/posts'; async function fetchData() { const response = await fetch(a); const data = await response.json(); return data; } // 立即执行的async匿名函数 (async () => { const result = await fetchData(); console.log(result); })();
关键提醒
await关键字只能在async函数内部使用,所以你不能直接在全局作用域写const result = await fetchData(),必须把它包裹在async函数里,或者用.then()来处理Promise的异步结果。这样就能拿到你想要的实际数据啦!
内容的提问来源于stack exchange,提问作者sajan
相关产品推荐
相关产品推荐

