promise
1.簡單說就是一個(gè)容器匆篓,里面保存著某個(gè)未來才會(huì)結(jié)束的事件(通常是一個(gè)異步操作)的結(jié)果猛铅。從語法上說,Promise 是一個(gè)對象雷厂,從它可以獲取異步操作的消息惋增。最大的好處,就可以將異步操作以同步操作的流程表達(dá)出來改鲫,避免了層層嵌套的回調(diào)函數(shù)诈皿。
2.有三種狀態(tài):pending(進(jìn)行中)、fulfilled(已成功)和rejected(已失斚窦)
3.只有兩種可能:從pending變?yōu)閒ulfilled和從pending變?yōu)閞ejected
4.resolved可以將pending狀態(tài)改成fulfilled狀態(tài)
5.then有兩個(gè)參數(shù)稽亏,可以理解為處理fulfilled與rejected這兩個(gè)狀態(tài)的回調(diào)函數(shù),一般我們在第一個(gè)回調(diào)函數(shù)里用resolved(data)來返回給調(diào)用者
6.then方法返回的是一個(gè)新的promise對象缕题,promise.then().then().then()這種寫法是可以的
7.promise可以配合es7里的async使用截歉,return一個(gè)resolve對象而不是一個(gè)promise對象
8.catch返回的也是一個(gè)promise對象,后面也可以跟著then
如果某些事件不斷地反復(fù)發(fā)生烟零,一般來說瘪松,使用 Stream 模式是比部署Promise
更好的選擇。
缺點(diǎn)
1.執(zhí)行后無法取消
2.如果不設(shè)置回調(diào)函數(shù)锨阿,Promise內(nèi)部拋出的錯(cuò)誤宵睦,不會(huì)反應(yīng)到外部
3.當(dāng)處于pending狀態(tài)時(shí),無法得知目前進(jìn)展到哪一個(gè)階段
fetch/require
1.是browser對象里window對象的方法
2.下一代類似ajax的API墅诡,很好的實(shí)現(xiàn)了對xhr的封裝
3.fetch(require).then().then().catch()的方式調(diào)用壳嚎,在require里設(shè)置url,method,mode等
4.Get請求有參數(shù)的時(shí)候,跟在require的url后面
5.require可以設(shè)置表頭請求時(shí)候帶上cookie
async/await
1.async函數(shù)就是將 Generator 函數(shù)的星號(hào)(*)替換成async,將yield替換成await诬辈,僅此而已酵使。
- Generator 函數(shù)需要執(zhí)行器去一條條的執(zhí)行,async函數(shù)自帶執(zhí)行器焙糟,可以跟普通函數(shù)一樣口渔,一行代碼執(zhí)行
3.async函數(shù)返回的是 Promise 對象,可以作為await命令的參數(shù)
4.正常情況下穿撮,await命令后面是一個(gè) Promise 對象缺脉。如果不是,會(huì)被轉(zhuǎn)成一個(gè)立即resolve的 Promise 對象