Node.js中调用axios.all封装的异步函数无法获取返回值如何解决
原因说明
所有标记为async的函数,调用后始终返回一个Promise实例,你直接打印调用结果得到的是Promise对象,而非接口返回的实际数据。
正确获取数据的两种方式
方法1:使用await调用
await 必须在async标记的函数上下文中使用,示例如下:
const fetchData = async () => { const data = await items() console.log('最终获取的数据:', data) // 所有需要使用该数据的业务逻辑都要写在当前作用域内 } fetchData()
如果你的运行环境支持顶级await,也可以直接在全局作用域写const data = await items()。
方法2:使用.then链式调用
不需要额外包裹async函数,直接通过Promise的链式回调获取数据,同时建议增加错误捕获逻辑:
items() .then(data => { console.log('最终获取的数据:', data) // 处理数据的业务逻辑写在这里 }) .catch(err => { console.error('接口请求失败:', err) })
原代码优化建议
你的原代码可以简化为更简洁的写法,且可以用原生Promise.all替代axios.all(兼容性更强,axios最新版本也推荐这种写法):
const items = async () => { const requestUrls = [ "https://api.storyblok.com/v1/cdn/stories/health?version=published&token=wANpEQEsMYGOwLxwXQ76Ggtt", "https://api.storyblok.com/v1/cdn/stories/vue?version=published&token=wANpEQEsMYGOwLxwXQ76Ggtt" ] const promiseList = requestUrls.map(url => axios.get(url)) const responses = await Promise.all(promiseList) return responses.map(item => item.data) }
内容的提问来源于stack exchange,提问作者Juan
相关产品推荐
相关产品推荐

