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

为何Axios调用返回[object Promise]而非预期数据?

问题描述

我编写了一个从API获取值的异步函数,在EJS模板中调用该函数时,返回的是[object Promise]而非实际数据,但通过console.log可以正常查看所需数据。

辅助函数(Helper)

const axios = require("axios");

const getBrokerName = async (id) => {
    API_BROKERS_URL = `${process.env.API_URL}/api/v1/brokers/?`;

    const params = new URLSearchParams({
        id: id,
        key: process.env.API_KEY,
    });
    
    try {
        const {data} = await axios.get(`${API_BROKERS_URL}${params}`);
        console.log(data.name)
        return data.name
        
    } catch (error) {
        console.log(err)
    }
}

module.exports = { getBrokerName }

EJS文件

<%= helper.getBrokerName(account.broker_id) %>

执行结果

[object Promise]

请问我忽略了什么?


问题原因与解决方案

核心原因

所有async函数的返回值本质都是Promise对象,直接在EJS的<%= %>标签中调用异步函数,只会把Promise对象转换成字符串输出(也就是[object Promise]),而不会自动等待Promise完成、获取最终返回值。

可行解决方案

1. 渲染模板前提前获取数据(推荐)

不要在模板中处理异步逻辑,而是在后端路由/控制器里先批量获取好所有需要的broker名称,再把完整数据传递给EJS渲染:

// 后端路由示例(以Express框架为例)
const { getBrokerName } = require('./path/to/your/helper-file');

app.get('/target-page', async (req, res) => {
    // 假设已通过业务逻辑获取到账户列表
    const originalAccounts = await fetchYourAccounts();
    
    // 遍历账户,批量获取对应经纪商名称
    const accountsWithBrokerInfo = await Promise.all(
        originalAccounts.map(async account => ({
            ...account,
            brokerName: await getBrokerName(account.broker_id)
        }))
    );
    
    // 将处理好的数据传入模板
    res.render('your-template', { accounts: accountsWithBrokerInfo });
});

之后在EJS模板中直接使用提前准备好的字段:

<%= account.brokerName %>

这种方式符合分层架构设计,避免模板逻辑复杂化,同时性能更可控。

2. 启用EJS异步渲染(仅临时小场景使用)

EJS支持异步渲染,但需要开启对应配置,且模板中要使用await:
首先在后端开启EJS的异步选项:

app.set('view engine', 'ejs');
// 启用异步渲染支持
app.set('view options', { async: true });

然后在EJS模板中使用await调用异步函数:

<%= await helper.getBrokerName(account.broker_id) %>

这种方式会让模板渲染过程因异步调用被多次阻塞,且模板逻辑混杂异步操作,不利于维护,仅适合极简单的临时场景。

额外修复点

你的辅助函数catch块中存在拼写错误:console.log(err)应该改为console.log(error),否则会抛出err is not defined的未定义变量错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:20:29