Nodejs - setTimeout函数无法正常工作

时间:2014-02-14 20:37:38

标签: node.js settimeout

我正在学习Node.js并尝试了一个简单的setTimeout()示例。应该发生的是:

“狗在跑。” (5秒钟后)  “狗已经完成了。”

但是当我运行代码时,程序运行5秒钟并打印两个语句。我不确定为什么会这样。我的代码如下:

var http = require('http');

http.createServer(function(request, response) {
  response.writeHead(200);
  response.write("Dog is running.\n");
  setTimeout(function(){
  response.write("Dog is done.");
  response.end();
  }, 5000);
}).listen(8080);

console.log("Server started!!!")

2 个答案:

答案 0 :(得分:3)

您可以修复此问题,将这3个标头添加到响应中:

response.setHeader('Connection', 'Transfer-Encoding');
response.setHeader('Content-Type', 'text/html; charset=utf-8');
response.setHeader('Transfer-Encoding', 'chunked');

就像这样:

var http = require('http');

http.createServer(function(request, response) {
  response.setHeader('Connection', 'Transfer-Encoding');
    response.setHeader('Content-Type', 'text/html; charset=utf-8');
    response.setHeader('Transfer-Encoding', 'chunked');
  setTimeout(function(){
    response.write("Dog is done.");
    response.end();
  }, 5000);
  response.write("Dog is running.\n");
}).listen(8080);

console.log("Server started!!!")

答案 1 :(得分:1)

你的代码非常好,并没有任何问题。 Node.js默认添加了分块标头,因此之前的答案都是错误的。

您可以使用telnet自行尝试:

$ telnet localhost 8080
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.1

HTTP/1.1 200 OK
Date: Sat, 15 Feb 2014 00:02:02 GMT
Connection: keep-alive
Transfer-Encoding: chunked

10
Dog is running.

c
Dog is done.
0

这里的问题是大多数浏览器会缓冲传入的数据,所以在页面完全加载之前它不会显示。

您可以尝试通过增加消息(添加千字节的空格或类似内容)来解决此问题。

但如果您只是测试setTimeout,请不要担心。只需使用telnet测试它,而不是常规浏览器。