在Node.js中,如果在我的I / O调用和/或回调仍在执行时调用“response.end()”会发生什么?如下所示:
var app = http.createServer(function(request, response) {
response.writeHead(200, { 'Content-Type': 'text/plain'});
fs.writeFile('baz', 'contents', function() {
myOtherFunc();
response.end('Second response.end');
});
response.end('First response.end');
});
具体做法是:
答案 0 :(得分:1)
调用response.end不会停止任何仍在执行的异步代码。如果您尝试结束或修改已经结束的响应,您可能会看到奇怪的行为。所以,对所有人来说基本上都是不过我承认,我不是节点如何在幕后处理HTTP连接的专家。
答案 1 :(得分:1)
我没有经过测试,但是:
response.end
之前,流可能不会被释放,但我怀疑你可以依赖它......指出连接必须关闭并尝试发送新数据最多"最好"安静地失败。response
将会消失。编辑:我正在假设response
流已被end
调用显式关闭,而不是只是坐在那里等待垃圾回收。我的假设是它只是异步完成而不是等待完成继续,如果你在事件循环的下一个滴答中到达那里,它仍然可以被分配。
再次编辑:你的勇敢的回答者通过节点源不知疲倦地搜索并确认,实际上,对end
的两次调用确实不起作用,第二次应该被短路by the OutgoingMessage.finished
property (see lines 499-501 and 541)