- 單線程和異步
- 背景:單線程
- (JS本質(zhì))JS是單線程語言,只能做一件事
- 瀏覽器和nodejs已支持JS啟動進程,如web worker(但并不是說能改變JS單線程這個本質(zhì))
- JS和DOM渲染共用同一線程:因為JS可修改DOM結(jié)構(gòu),因此會有JS堵塞DOM構(gòu)建的說法
- 異步:
- 解決場景:遇到等待(網(wǎng)絡請求、定時任務)不能卡住
- 回調(diào)callback函數(shù)形式
- 特點:不會阻塞代碼執(zhí)行,會先同步按序執(zhí)行JS,直到異步的時間點到了,再去執(zhí)行之前的回調(diào)函數(shù),【就算setTimeout的時間點為0,它依然是個異步回調(diào)函數(shù),因此依然會在JS同步執(zhí)行全部完畢之后再去執(zhí)行】
- 背景:單線程
- 應用場景
- 定時任務,如setTimeout
- 網(wǎng)絡請求,如ajax圖片加載
- 如果都是同步執(zhí)行,卡就卡,等待就等待,那么等待的過程CPU是空閑的,這是在浪費資源
- callback hell 和promise(promise是用于解決callback hell)
- callback hell是在ajax出來之后,promise出來之前,一直被詬病的一個問題,不斷地嵌套請求
- promise產(chǎn)生解決了:
- 管道形式,改變了callback hell的嵌套形式,符合人的書寫習慣
- promise語法:
new Promise((resolve,reject)=>{
// ...請求代碼
}).then(success=>{
resolve(success)
}).catch(error=>{
reject(error)
})