Node.js 只执行了一个函数

Posted

技术标签:

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

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

【问题讨论】:

您能提供更多信息吗?您可能会遇到任何错误吗?用户未登录时是否会发生这种情况? 如果用户没有登录,send() 将被执行并且响应在没有 renderEntries() 的情况下完成。但是如果用户登录,renderEntries 也不会执行,res.send() 也不会执行。 好的,两个函数都执行了,但是条目只在获取请求时呈现,而不是在发布时呈现 【参考方案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() 如果用户登录将不会执行。 这是您可以单独提出的另一个问题。如果此问题解决了“只执行一个函数”的问题,请标记为“已接受”。

以上是关于Node.js 只执行了一个函数的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 回调函数

node js 回调函数

Node.js 回调函数

Node.js 回调函数

哪种方式更方便在无限循环中执行异步函数,每次执行之间都休眠(Node.js / Vanilla JS)

node.js之事件机制