如何提升异步调用代码可读性?Promise写法优化咨询
优化方案说明
你的期望写法思路是对的,核心问题在于fetchData()是异步函数,调用后返回的是Promise对象,直接console.log无法拿到实际返回的response.data,需要正确处理这个异步结果。以下是修正后的可运行代码:
修正后的完整代码
// 简化apiCall,直接返回axios的Promise即可,无需额外async/await const apiCall = () => { return axios.get("URL"); } const fetchData = async() => { const response = await apiCall(); return response.data; } // 处理异步结果的两种方式: // 方式1:用立即执行的异步函数包裹,内部await获取结果后打印 (async () => { const data = await fetchData(); console.log(data); })(); // 方式2:用.then()处理(如果偏好这种写法) // fetchData().then(data => console.log(data));
关键修正点
apiCall可简化:axios.get本身就返回Promise,不需要额外包裹async函数,直接返回这个Promise即可,和你期望的写法一致。- 必须正确处理异步结果:
async函数的返回值是Promise,不能直接console.log(fetchData()),否则会输出Promise { <pending> }。可以用立即执行的异步函数表达式包裹,内部用await拿到结果后再打印,或者继续用.then()处理。
原期望代码无法运行的原因
当执行console.log(fetchData())时,fetchData作为异步函数会立刻返回一个处于pending状态的Promise,此时网络请求还未完成,所以打印的是Promise对象而非实际数据。必须等待Promise状态变为resolved后,才能获取到里面的response.data。
内容的提问来源于stack exchange,提问作者Kyrip
相关产品推荐
相关产品推荐

