【问题标题】:Node.js only one function executedNode.js 只执行了一个函数
【发布时间】:2017-12-17 15:46:03
【问题描述】:

我尝试在发布请求中执行两个功能,但只触发了一个。函数 makeEntry 执行,但之后的函数 renderEntries 不执行。有人可以帮忙吗? 这是代码:https://codepaste.net/bpsxsy

【问题讨论】:

  • 您能提供更多信息吗?您可能会遇到任何错误吗?用户未登录时是否会发生这种情况?
  • 如果用户没有登录,send() 将被执行并且响应在没有 renderEntries() 的情况下完成。但是如果用户登录,renderEntries 也不会执行,res.send() 也不会执行。
  • 好的,两个函数都执行了,但是条目只在获取请求时呈现,而不是在发布时呈现

标签: node.js function execution


【解决方案1】:

这是由于回调在 Javascript 中的工作方式。这是重要的部分:

  app.post('/guestbook_post', urlencodedparser, function(req, res){
    makeEntry(req, res, Guestbook);
    renderEntries(res, Guestbook);
  });

您将res 传递给这两个函数。但是makeEntry 调用res.send() 这意味着它将结束请求并将响应发送回客户端。但是,renderEntries 尚未执行,但仍在事件循环中等待。它将在您下次发出 post 请求时执行,这将导致非常混乱和错误的行为。

为了使其按预期工作,重构函数makeEntryrenderEntries返回 所需的结果对象,并将其呈现给客户端一次。像这样的:

  app.post('/guestbook_post', urlencodedparser, function(req, res){
    makeEntry(req, Guestbook, (err, entry) => {
        renderEntries(entry, Guestbook, (err, result) => {
            res.send(result);
        });
    });
  });

【讨论】:

  • 谢谢,但 res.send() 如果用户登录将不会执行。
  • 这是您可以单独提出的另一个问题。如果此问题解决了“只执行一个函数”的问题,请标记为“已接受”。
猜你喜欢
  • 1970-01-01
  • 2017-07-27
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 2013-05-22
  • 2023-03-15
  • 2018-02-05
  • 1970-01-01
相关资源
最近更新 更多