Nodejs - 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!!!")

您可以修复它,将以下 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!!!")

你的代码非常好,没有任何问题。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 进行测试,而不是常规浏览器即可。

最新更新