說(shuō)說(shuō)async原理?【專(zhuān)欄16】

提到async就必須要提Generator了,因?yàn)閍sync函數(shù)是Generator函數(shù)的語(yǔ)法糖,將Generator的星號(hào)換成async將yield換成await
Generator是一個(gè)函數(shù),可以在函數(shù)內(nèi)部通過(guò)yield返回一個(gè)值(此時(shí),Generator函數(shù)的執(zhí)行會(huì)暫定,直到下次觸發(fā).next())
創(chuàng)建一個(gè)Generator函數(shù)的方法是在function關(guān)鍵字后添加*標(biāo)識(shí)。
在調(diào)用一個(gè)Generator函數(shù)后,并不會(huì)立即執(zhí)行其中的代碼,函數(shù)會(huì)返回一個(gè)Generator對(duì)象,通過(guò)調(diào)用對(duì)象的next函數(shù),可以獲得yield/return的返回值。
無(wú)論是觸發(fā)了yield還是return,next()函數(shù)總會(huì)返回一個(gè)帶有value和done屬性的對(duì)象。value為返回值,done則是一個(gè)Boolean對(duì)象,用來(lái)標(biāo)識(shí)Generator是否還能繼續(xù)提供返回值。
Generator基本使用
const getUserName=()=>{
return "鬼鬼"
}
const getUserAge=()=>{
return 18
}
function* getUserInfo(){
yield getUserName()
yield getUserAge()
}
const info = getUserInfo();
console.log(info.next().value); // 鬼鬼
console.log(info.next().value); // 18
async原理
1.相比起Generator,async和await 語(yǔ)義更清晰 2.await必須在async函數(shù)里使用,不能單獨(dú)使用; 3.await后面需要跟Promise對(duì)象,不然就沒(méi)有意義 4.await它會(huì)暫停原異步函數(shù)的執(zhí)行,并等待右側(cè)Promise返回結(jié)果 5.async 默認(rèn)返回一個(gè)Promise函數(shù)
const getUserInfo=async ()=> {
return "鬼鬼"
}
getUserInfo()

參考資料
https://cnblogs.com/jiasm/p/8999111.html https://developer.mozilla.org/
說(shuō)明
本專(zhuān)欄總共匯總了150道題,每道題目答案沒(méi)有多余扯皮的部分,就是單純的答案。
關(guān)注公眾號(hào),每天一到面試題,為下次跳槽準(zhǔn)備,人人都能沖擊30k+,點(diǎn)擊↓關(guān)注【鬼哥】
當(dāng)前進(jìn)度【#016題】,如果你能點(diǎn)贊分享、鬼哥騎自行車(chē)也是開(kāi)心的
