Node.js只执行了一个函数

问题描述 投票:0回答:1

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

node.js function execution
1个回答
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);
        });
    });
  });
© www.soinside.com 2019 - 2024. All rights reserved.