【问题标题】:How to dynamically render Async function output with Express/Pug?如何使用 Express/Pug 动态呈现异步函数输出?
【发布时间】:2021-09-18 23:30:31
【问题描述】:

我想动态显示使用此异步函数获得的变量:

    async function makeGetRequest() {
      res = await axios.get(url);
      xml2js.parseString(res.data, function (err, file) {
      return file.item[0].title; });
}

makeGetRequest().then(console.log);


**OUTPUT: TITLE:[object Promise]**

我不想像上面的 sn-p 那样记录值,而是将值传递给 Express 渲染器以在页面上动态呈现值:

app.get('/dynamic', function(req, res){
    res.render('dynamic', {
       title: title_value_here;
    });
 });

有人可以说明如何实现吗?

我尝试将异步输出存储在变量中,然后将其传递给渲染器,但我得到了:

let out= await makeGetRequest();
console.log(author);
SyntaxError: await is only valid in async functions and the top level bodies of modules

【问题讨论】:

    标签: javascript node.js express asynchronous pug


    【解决方案1】:

    目前,pug 语言不支持 async/await。这意味着您将不得不等待结果并按照此答案的建议传递给模板:https://stackoverflow.com/a/68302690/10343551

    关于将异步添加到 pug 语言,这是一个标记为已关闭(不久前)的问题。其中一位贡献者谈到哈巴狗的设计是同步的:https://github.com/pugjs/pug/issues/2206#issuecomment-169881732

    据我所知(截至 2021 年 12 月)尚未添加异步。这意味着您不能在模板内部等待,而必须在渲染模板并将其传入之前执行此操作。

    【讨论】:

      【解决方案2】:

      你可以把它放在app.get

      app.get('/dynamic', async function(req, res){
        const out = await makeGetRequest();
        res.render('dynamic', {
          title: <use out here>;
        });
      });
      

      【讨论】:

      • 谢谢,但由于某种原因,我实际上无法保存输出变量的值:makeGetRequest().then(console.log); 给出'TITLE1',但是:let author= await makeGetRequest(); console.log(author); SyntaxError: await is only valid in async functions and the top level bodies of modules 编辑:使用makeGetRequest().then(out =&gt; { console.log(out)}); 给出undefined跨度>
      • 你没有做我在回答中显示的内容。那么你的评论是什么意思?
      猜你喜欢
      • 2019-06-19
      • 2017-06-30
      • 2011-08-17
      • 1970-01-01
      • 2015-12-02
      • 2016-01-02
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多