我不明白为什么代码在返回并调用res.send()后仍继续运行。这是GIST,有助于理解。
更新:
好吧,在社区帮助之后,现在发现并了解问题是返回res.send();
与console.log()
并行发生异步。
在这种特定情况下,解决方案包含在if/else
内。
感谢@Tom和@PaulPro!
答案 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!