Node.js只执行了一个函数

时间:2017-12-17 15:46:03

标签: node.js function execution

我尝试在post请求中执行两个函数,但只触发一个。函数makeEntry执行但后面的函数renderEntries不执行。任何人都可以帮忙吗? 以下是代码:https://codepaste.net/bpsxsy

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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