【问题标题】:How to display the data returned from an async function in .ejs?如何在 .ejs 中显示从异步函数返回的数据?
【发布时间】:2021-12-14 13:41:47
【问题描述】:

我将一个包含异步函数的对象传递给 .ejs 文件

const express = require('express')
const app = express()
const PORT = process.env.PORT || 3000

const functions = require('./functions.js')

app.set('view-engine', 'ejs')

app.listen(PORT, () => {
    console.log('listening on 3000', new Date())
})
 
app.get('/', (req, res) => {
    res.render('dashboard.ejs', { functions })
})

函数控制台记录数据并返回

const getPrice = async (coin) => {
    let data = await CoinGeckoClient.coins.fetch(coin);
    console.log(coin, "GBP", data.data.market_data.current_price.gbp)
    console.log(data.data.market_data.price_change_percentage_24h, '% / 24 hours')
    return `
    ${coin} "GBP" ${data.data.market_data.current_price.gbp}
    ${data.data.market_data.price_change_percentage_24h}% / 24 hours')
    `
};

我想在 .ejs 文件中呈现返回的数据。我正在尝试这个

<body>
    <p>
        <%= functions.getPrice('ethereum') %>
    </p>
</body>

刷新浏览器时控制台日志成功

ethereum GBP 3141.5
3.00725 % / 24 hours

所以函数被调用了,但是数据没有被渲染到屏幕上。

我反而得到 [object Promise]。

我觉得这是一个异步问题,但不确定如何/是否可以让 ejs 等待返回的数据。我是不是结构错了?

感谢任何帮助!

【问题讨论】:

标签: javascript node.js asynchronous ejs


【解决方案1】:

您可以在 JS 文件中调用您的函数,然后将结果传递给 EJS 文件:

app.get('/', async(req, res) => {
    res.render('dashboard.ejs', { price: await functions.getPrice('ethereum')})
})

然后在你的 EJS 中:

<body>
    <p>
        <%= price %>
    </p>
</body>

【讨论】:

    猜你喜欢
    • 2020-12-08
    • 2016-08-11
    • 2015-04-21
    • 2023-04-03
    • 2021-03-04
    • 1970-01-01
    • 2020-07-29
    • 2023-03-08
    • 2015-08-15
    相关资源
    最近更新 更多