根据Understanding the node.js event loop,node.js支持单个线程模型 . 这意味着如果我向node.js服务器发出多个请求,它将不会为每个请求生成一个新线程,而是逐个执行每个请求 . 这意味着如果我在node.js代码中为第一个请求执行以下操作,同时在节点上有新请求,则第二个请求必须等到第一个请求完成,包括5秒休眠时间 . 对?
var sleep = require('sleep');
sleep.sleep(5)//sleep for 5 seconds
有没有一种方法,node.js可以为每个请求生成一个新线程,以便第二个请求不必等待第一个请求完成,或者我可以只在特定线程上调用睡眠?
3 回答
请考虑 deasync 模块,我个人不喜欢Promise方式使所有函数都异步,并且关键字async / await anythere . 我认为官方node.js应该考虑公开事件循环API,这将简单地解决回调地狱 . Node.js是一个框架而不是一种语言 .
如果您指的是npm模块sleep,它在自述文件中指出
sleep
将阻止执行 . 所以你是对的 - 这不是你想要的 . 相反,你想使用非阻塞的setTimeout . 这是一个例子:对于任何希望使用es7 async / await执行此操作的人,此示例应该有所帮助:
如果您在每个请求中都有一个异步请求的循环,并且您希望在每个请求之间有一定的时间,则可以使用以下代码:
在发送下一个请求之前,此示例在每个请求之后等待1秒 .