我想知道下面的代码的行为背后的机制是:
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方法)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。