在带有辅助函数的 ejs 中使用 .then 返回 [ object promise ]
Posted
技术标签:
【中文标题】在带有辅助函数的 ejs 中使用 .then 返回 [ object promise ]【英文标题】:Using .then in ejs with helper function returns [ object promise ] 【发布时间】:2021-03-09 13:36:48 【问题描述】:在我的 ejs 文件中,我在另一个返回 mysql 结果的文件中调用辅助函数。问题是即使我使用 .then(),返回值也是 [object promise]。我不确定为什么。
辅助函数
var conn = require("../routeFunctions/mySqlConn");
//get the amount of likes
var getLikesCountEjs = function(idOfPost)
var query = getLikeCount(idOfPost).q;
var preparedStatement = getLikeCount(idOfPost).ps;
return new Promise(function (resolve, reject)
conn.query(query, preparedStatement, function (err, result, fields)
if (err)
reject("problem getting likes count");
else
resolve(result[0].count);
);
);
//get all likes count
function getLikeCount(idOfPost)
var query = "SELECT COUNT(*) as count FROM likes where idOfPost = ?";
var preparedStatement = [parseInt(idOfPost)];
return ps: preparedStatement, q: query ;
//you can return multiple functions
module.exports = getLikesCountEjs : getLikesCountEjs ;
我调用函数的ejs文件
<a href="#" class="link-black text-sm interactSetLikesTimeLine" id = "setLikes-<%=posts.id%>">
<i class="far fa-thumbs-up mr-1 initalLoadSetLikes"> Likes <%= asyncFunctions.getLikesCountEjs(posts.id).then(function(result) console.log(result); ) %> </i>
</a>
【问题讨论】:
您应该在 nodeJS 后端执行此操作。可以看出here,这是不可能的(在我看来也不实用) EJS 文件使用您传递的数据呈现。当然,他们不能渲染将来会发生的事情。他们无法渲染.then()
中的内容,只是因为它还没有发生。
【参考方案1】:
您不能将async
与 EJS、read this issue 一起使用。
这样的 async
方法应该在 nodeJS 后端完成,所以你有类似的东西:
app.get('...', async (req, res) =>
res.render('...',
data: await asyncFunctions.getLikesCountEjs(posts.id)
)
)
应该够了。
【讨论】:
我可以在我的辅助函数中添加这个吗? 什么意思?只需像我大致拥有的那样执行您的辅助函数即可。 好的。我对节点 js 和异步的东西很陌生,所以我有点麻烦。我不确定我是否正确,但是。当我看到 app.get 时,我正在考虑我的路线。所以我在想.. 在路由请求中,使用“await 关键字”在 ejs 中加载我的辅助函数来渲染页面。然后在我的 ejs 中,引用数据而不是我的实际帮助函数。这将允许我在 ejs 中使用 await 而不会出错。对吗? 对不起,我误会了。我想我现在明白了 是的,你似乎明白我想说什么! (使用通过render传递的变量而不是调用函数)以上是关于在带有辅助函数的 ejs 中使用 .then 返回 [ object promise ]的主要内容,如果未能解决你的问题,请参考以下文章
我如何编写一个从 mongodb 查询的辅助函数,然后可以为任何 ejs 模板调用此函数