You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Promise返回数据?为何getPageData函数返回void?

从Promise返回数据的正确方式及你的代码问题解析

问题根源

你的getPageData函数是无返回值的void类型,核心原因是:它内部调用getApiData()并链式调用.then(),但没有把整个Promise链返回出去,函数执行完默认返回undefined。

修正方案

方案1:直接返回Promise链

把getApiData()的调用结果返回,让函数成为一个Promise类型的函数:

export default function getPageData() {
    return getApiData('shared-content', 'en-us')
        .then((response) => {
            // 注意:axios.get返回的是包含data字段的响应对象,需按需返回实际数据
            return response.data;
        })
        .catch((error: any) => {
            console.error('获取数据失败:', error);
            // 可选择抛出错误让调用方处理,或返回默认值
            throw error;
        })
}

方案2:改用async/await写法(更易读)

利用async函数自动返回Promise的特性,简化异步逻辑:

export default async function getPageData() {
    try {
        const response = await getApiData('shared-content', 'en-us');
        return response.data;
    } catch (error: any) {
        console.error('获取数据失败:', error);
        throw error;
    }
}

额外优化点

  • getApiData中的return await可以简化为return,因为axiosClient.get()本身就是Promise,async函数会自动包装返回值为Promise:
    async function getApiData(pathName: string, locale: string) {
        const {axiosRequestUrl} = getApiVars(pathName, locale);
    
        const axiosClient = axios.create({
            baseURL: process.env.CONTENT_DOMAIN,
            proxy: false
        })
    
        return axiosClient.get(axiosRequestUrl);
    }
    
  • 组件中使用时,需通过async/await或.then()处理异步返回的数据:
    // 组件内使用示例
    async function loadPageData() {
        try {
            const data = await getPageData();
            // 处理数据逻辑
        } catch (error) {
            // 错误兜底处理
        }
    }
    

内容的提问来源于stack exchange,提问作者ReynierPM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 02:52:07