我们都知道 NodeJS 是单线程的,这意味着如果我们的代码中有 async/await 操作,节点将等待它完成后再执行其余代码。因此,如果用户发出异步请求,其他用户也应该等待它完成后再发出请求吗?
这里我创建了一个简单的示例,第一个路由使用异步函数,需要 10 秒才能发送响应,第二个路由立即发送响应。
当我向第一个路由发送请求并在等待响应时,我向第二个路由发送了另一个请求,并且即使第一个路由尚未完成执行代码,我也得到了响应。
为什么这个例子是非阻塞的?
function sleep(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(true)
},10000)
}).then(val=>val)
}
router.get('/route1',async (req,res)=>{
const test = await sleep()
res.send('HELLO WORLD')
})
router.get('/route2',(req,res)=>{
res.send("HELLO WORLD")
})
Run Code Online (Sandbox Code Playgroud)