鍍金池/ 問答/HTML/ node接口里使用promise疑問?

node接口里使用promise疑問?

promsie解決了異步回調(diào)嵌套問題,但是使用promsie會不會造成阻塞?
接口異步寫法:

app.use('/test',function(req,res){
 fn() 
}

fn是一個異步查詢數(shù)據(jù)庫函數(shù),由于fn是異步,代碼不會再這里等待,假如同時多個請求,下一個請求不會等待fn執(zhí)行完才接入執(zhí)行,node可以快速接入多個請求.
用async寫接口:

app.use('/test',function(req,res){
   async fn(){
   let res=await fn1()
   let res1=await fn2(res)
   res.send(res1)
   }
fn()
}

此時fn變?yōu)橥?下一個請求必須等待上一個請求處理完才接入,如果請求多的話,是否會造成阻塞,導(dǎo)致靠后的請求等待時間很長?目前很多都是使用promsie來寫封裝接口,會不會造成以上問題?還是我理解錯誤?

回答
編輯回答
祈歡

阻塞是不可能的,這輩子都不可能的。
直觀上的async/await阻塞只是因為回調(diào)還沒有執(zhí)行,而沒有執(zhí)行回調(diào),后續(xù)的res.send也不會執(zhí)行,導(dǎo)致這個請求一直沒有響應(yīng)。

awaitasync只是用來幫助你更好地處理Promise罷了,CPU并不會一直在這一個請求上等著await后邊的Promise改變狀態(tài)。
而是先去做其他的事情了,這里就涉及到了那個EventLoop。

async await依然是異步、異步、異步。只是看起來像同步罷了

正好前幾天寫了一篇,可以稍微看下了解一下:https://segmentfault.com/a/11...

2018年2月17日 20:10