为什么在“ res.send”之后执行代码?
我想知道以下代码的行为背后的机制是什么:
res.send(200, { data: 'test data' });console.log('still here...');
我的理解是res.send
不 返回 函数,而是 关闭连接/结束请求
。这可以解释为什么我仍然可以在res.send
命令后执行代码(我查看了快速源,但它似乎不是异步函数)。
还有其他我可能会想念的东西吗?
回答:
当然可以end
结束HTTP响应,但是它对您的代码没有做任何特殊的事情。
即使您已结束回复,也可以继续做其他事情。
但是,您 无法 做的是利用进行任何有用的操作res
。由于响应结束,因此您无法向其写入更多数据。
res.send(...);res.write('more stuff'); // throws an error since res is now closed
此行为与其他传统框架(PHP,ASP等)不同,其他传统框架将线程分配给HTTP请求并在响应结束时终止线程。如果调用类似ASP的等效函数Response.End
,则线程终止并且您的代码停止运行。在节点中,没有线程要停止。
req
并且res
不会再触发任何事件,但是回调中的代码可以自由继续运行(只要它不尝试调用res
需要打开有效响应的方法即可)。
以上是 为什么在“ res.send”之后执行代码? 的全部内容, 来源链接: utcz.com/qa/408970.html