我尝试在post请求中执行两个函数,但只触发一个。函数makeEntry执行但后面的函数renderEntries不执行。任何人都可以帮忙吗? 以下是代码:https://codepaste.net/bpsxsy
答案 0 :(得分:2)
这是由于回调在Javascript中的工作原理。这是重要的部分:
app.post('/guestbook_post', urlencodedparser, function(req, res){
makeEntry(req, res, Guestbook);
renderEntries(res, Guestbook);
});
您将res
传递给这两个函数。但makeEntry
调用res.send()
,这意味着它将结束请求并将响应发送回客户端。但是,renderEntries
尚未执行,但仍在事件循环中等待。它将在您下次发布请求时执行,这将导致非常混乱和错误的行为。
为了使其有意义,重构函数makeEntry
和renderEntries
以返回所需的结果对象并将其呈现给客户端一次。像这样:
app.post('/guestbook_post', urlencodedparser, function(req, res){
makeEntry(req, Guestbook, (err, entry) => {
renderEntries(entry, Guestbook, (err, result) => {
res.send(result);
});
});
});