小编MSx*_*MSx的帖子

NodeJS 中的阻塞与非阻塞

我们都知道 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)

javascript nonblocking node.js express async-await

1
推荐指数
1
解决办法
1304
查看次数

标签 统计

async-await ×1

express ×1

javascript ×1

node.js ×1

nonblocking ×1