簡體   English   中英

如何在.ejs 中顯示從異步函數返回的數據?

[英]How to display the data returned from an async function in .ejs?

我將包含異步函數的對象傳遞給 .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 等待返回的數據。 我是否錯誤地構造了這個?

任何幫助,不勝感激!

您可以在 JS 文件中調用您的函數,然后將結果傳遞給 EJS 文件:

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

然后在你的 EJS 中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM