除了这篇文章javascript (nodejs) while loop bug 这是与节点js中的“while”循环不同的问题,我似乎无法理解为什么以下代码不会“阻塞”。我试图阻止事件循环,以便我可以阻止请求(这只是为了测试/愉快并熟悉nodejs)。
http = require('http')
data = ""
processData = (chunk) ->
date = new Date()
dm = date.getMilliseconds()
curDate = null
loop
curDate = (new Date()).getMilliseconds()
break if curDate-dm > 4000
data += chunk
endData = ->
console.log(data)
data = ""
requestListener = (req,res) ->
req.on "data", processData
req.on "end", endData
res.writeHead 200
res.write "hello buddy"
res.end()
webserver = http.createServer requestListener
webserver.listen(6666)
我期待某种阻塞4秒,然后通过
控制台显示请求中的一些数据curl -d "testdata=32" "http://localhost:6666"
但是,节点从不向控制台写入任何内容,也不会将响应发送回客户端,只是“冻结”。如果我将时间增加到100毫秒,它适用于前5-8次尝试(将数据发送回卷曲)但最终冻结。我在这里错过了什么吗?这是一个错误吗?节点不应该优雅地处理这个吗?
我遇到了其他阻塞方法,例如:
var startTime = new Date().getTime();
while (new Date().getTime() < startTime + 4000);
我的环境:windows 7 / cywin 2.774 / nodejs 0.8.10 / curl 7.27.0