Node.js - 使用sleep模拟I / O.

时间:2015-03-19 22:07:47

标签: node.js nonblocking

我的目标是使用node.js演示非阻塞代码的强大功能,因此我尝试使用sleep语句模拟I / O事件,但我的努力仍然失败:

var http = require('http');
var url = require('url');

http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});

if( url.parse(request.url).pathname == '/wait' ){
    var startTime = new Date().getTime();
    while (new Date().getTime() < startTime + 15000);
    response.write('Thanks for waiting!');
}
else{
    response.write('Hello!');
}

response.end();
}).listen(8080);

console.log('Server started');

当我在http://localhost:8080/wait之后访问http://localhost:8080时,两者都在等待循环。

任何提示?

1 个答案:

答案 0 :(得分:2)

setTimeout是你的朋友,大括号也是。

app.use(function(request, response, next) {
  var doIt, startTime;
  if (request.path === '/wait') {
    startTime = new Date().getTime();
    doIt = function() {
      if (new Date().getTime() < startTime + 15000) {
        response.write('Thanks for waiting!');
        return setTimeout(doIt, 1000);
      } else {
        return response.end();
      }
    };
    return doIt();
  } else {
    response.write('Hello!');
    return response.end();
  }
});