千鋒教育JavaScript全套視頻教程(10天學(xué)會Js,前端javascrip

回調(diào)地獄
回調(diào)函數(shù):就是把一個函數(shù)當(dāng)作一個函數(shù)的參數(shù)-
當(dāng)異步操作想要有順序執(zhí)行時,只能再一個異步成功以后的回調(diào)函數(shù)里面嵌套另一個異步的操作,如果嵌套層數(shù)過多就形成了回調(diào)地獄,弊端:后期代碼維護(hù)比較難
promese
解決回調(diào)地獄的問題
promise 封裝了異步操作,創(chuàng)建一個promise對象,創(chuàng)建一個函數(shù)參數(shù),這個函數(shù)參數(shù)有兩個參數(shù)(resolve,rehject),函數(shù)參數(shù)內(nèi)部寫異步操作,成功resolve(),失敗reject(),然后promise對象會接收到異步操作的狀態(tài)。p.then(成功)、p.catch(失敗)
promise 對象的狀態(tài)(狀態(tài)機(jī)-記錄內(nèi)部異步操作的狀態(tài))
進(jìn)行中 pending (promise創(chuàng)建以后)
成功 fulfilled(調(diào)用resolve 以后就會成功 ----resolve(成功的結(jié)果))
失敗 reject (調(diào)用reject以后就會失敗---reject(失敗結(jié)果))
進(jìn)行中--成功
進(jìn)行中--失敗,
狀態(tài)不可逆
promise 封裝
1.寫個函數(shù)
2.函數(shù)內(nèi)部創(chuàng)建promise對象
3.promise 對象里寫異步操作,成功調(diào)resolve 失敗調(diào)reject
4.這個函數(shù) return promise對象
缺點(diǎn):還有一層嵌套
promise的靜態(tài)方法
1.快速創(chuàng)建一個成功的peomise對象
peomise.resolve()
2.失敗:promise.reject
3.promise.all(數(shù)組)
all的參數(shù)是一個數(shù)組,數(shù)組中元素是多個promise對象,all方法返回一個promise對象兩個都成功才成功,有一個失敗那么就是失敗
4.promise.race(數(shù)組)看誰更快就取誰的狀態(tài)
5.promise.any() 獲取第一個成功的promise的狀態(tài)
6.promise.allSettled(數(shù)組)全部結(jié)清,會等到都結(jié)束,統(tǒng)一獲取所有人的狀態(tài)。
async await
原理:實(shí)際上是生成器函數(shù)的語法糖
es 7的語法
回調(diào)地獄最終解決方法
可以將異步嵌套的語法,改成像是同步一樣。不需要嵌套,就可以有先后順尋
使用:
1.定義一個函數(shù),函數(shù)前面加async
2.函數(shù)里面可以寫異步操作,異步操作必須被promise封裝
3.promise對象前面寫一個 await,就會等promise'里的異步操作成功以后再往下執(zhí)行
缺點(diǎn):只能等成功之后往下執(zhí)行
try -catch