setTimeout在nodeJS中不起作用

时间:2013-01-13 13:06:19

标签: node.js settimeout

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

无论我尝试什么,都不会调用该函数。这是另一个代码,它演示了我在程序中尝试做的事情:

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毫秒,然后是一个非常长的循环,但这不起作用。

为什么会这样?

1 个答案:

答案 0 :(得分:5)

永远不会调用回调,因为setTimeout是异步的。当“转弯”结束时,计时器被激活,你在转弯结束前清除超时。

您应首先阅读有关javascript事件驱动架构的信息。 This tutorisal将是一个良好的开端。这对于解决您的超时问题至关重要。