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 请求时执行,这将导致非常混乱和错误的行为。
为了使其按预期工作,重构函数makeEntry
和renderEntries
以返回 所需的结果对象,并将其呈现给客户端一次。像这样的:
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 只执行了一个函数的主要内容,如果未能解决你的问题,请参考以下文章