在带有辅助函数的 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 模板调用此函数

使用带有变量的 If Then 运行不同的 SQL 语句

辅助函数

mongo 文档中的对象在 EJS 中显示未定义

在 React Native 中的组件挂载之前调用带有参数的辅助函数

无法使用 Xcode 7.3.1 在我的 Swift 2 项目中检查带有“po”的变量 - 加载辅助函数时出错