setTimeout在nodeJS中不起作用

我正在写一个基于net模块(家庭作业分配)的小型dynamicHTTP服务器,如果服务器用户在两秒钟后没有调用response.end() ,则发送408响应。

不pipe我尝试了什么,函数都没有被调用。 下面是另一个代码,演示了我在程序中所做的事情:

 var NET = require("net"); var server = NET.createServer(function(socket){ console.log("In connectionHandler"); socket.on('data',function(data) { console.log("New data"); var timer = setTimeout(function(end){ console.log("INSIDE TIMEOUT FUNCTION"); if (end) { return; } throw new ERROR.ServerError('408',' Request Timeout','The \ server has timedouted'); },10,true); for (var t = 0 ; t < 100000000000 ; t++){} clearTimeout(timer); }) }); server.listen(4000, function() { console.log("server bound"); }); 

所以,超时设置为10毫秒,然后是一个非常长的循环,但这是行不通的。

为什么发生这种情况?

callback永远不会被调用,因为setTimeout是asynchronous的。 当这个“转弯”结束时,计时器被激活,并且在转弯结束之前清除超时。

您应该先阅读关于JavaScript的事件驱动架构。 这Tutorisal将是一个好的开始。 这对解决您的超时问题至关重要。