为什么代码在'return res.send();'之后仍然继续运行

时间:2014-02-12 22:22:12

标签: javascript node.js express

我不明白为什么代码在返回并调用res.send()后仍继续运行。这是GIST,有助于理解。

更新:

好吧,在社区帮助之后,现在发现并了解问题是返回res.send();console.log()并行发生异步。

在这种特定情况下,解决方案包含在if/else内。

感谢@Tom和@PaulPro!

2 个答案:

答案 0 :(得分:15)

如果您使用以下代码段,则会在控制台上打印Hi!文字(请注意return旁边没有res.send)。

app.get('/asd', function (req, res) {
  res.send('OK');
  console.log('Hi!');
});

以下代码段不会在控制台上打印Hi!,因为请求处理功能随res.send('OK');表达式结束

app.get('/asd', function (req, res) {
  return res.send('OK');
  console.log('Hi!');
});

您可以在第一个实例中看到Hi!的原因是res.send函数是异步执行的,即方法发送响应在JavaScript事件循环中排队,请求处理函数继续执行和调用带有console.log参数的Hi!

我希望这会有所帮助。

答案 1 :(得分:1)

好了,在社区帮助后现在发现并了解问题是返回res.send();与console.log()并行发生异步。在这种特定情况下,解决方案是在(){} else {}内部包装。感谢@Tom和@PaulPro!