




已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Promise,王紅元微博:coderwhy微信:372623326,什么是Promise呢?,ES6中一個(gè)非常重要和好用的特性就是Promise但是初次接觸Promise會(huì)一臉懵逼,這TM是什么東西?看看官方或者一些文章對(duì)它的介紹和用法,也是一頭霧水。Promise到底是做什么的呢?Promise是異步編程的一種解決方案。那什么時(shí)候我們會(huì)來(lái)處理異步事件呢?一種很常見(jiàn)的場(chǎng)景應(yīng)該就是網(wǎng)絡(luò)請(qǐng)求了。我們封裝一個(gè)網(wǎng)絡(luò)請(qǐng)求的函數(shù),因?yàn)椴荒芰⒓茨玫浇Y(jié)果,所以不能像簡(jiǎn)單的3+4=7一樣將結(jié)果返回。所以往往我們會(huì)傳入另外一個(gè)函數(shù),在數(shù)據(jù)請(qǐng)求成功時(shí),將數(shù)據(jù)通過(guò)傳入的函數(shù)回調(diào)出去。如果只是一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)請(qǐng)求,那么這種方案不會(huì)給我們帶來(lái)很大的麻煩。但是,當(dāng)網(wǎng)絡(luò)請(qǐng)求非常復(fù)雜時(shí),就會(huì)出現(xiàn)回調(diào)地獄。OK,我以一個(gè)非??鋸埖陌咐齺?lái)說(shuō)明。,網(wǎng)絡(luò)請(qǐng)求的回調(diào)地獄,我們來(lái)考慮下面的場(chǎng)景(有夸張的成分):我們需要通過(guò)一個(gè)url1從服務(wù)器加載一個(gè)數(shù)據(jù)data1,data1中包含了下一個(gè)請(qǐng)求的url2我們需要通過(guò)data1取出url2,從服務(wù)器加載數(shù)據(jù)data2,data2中包含了下一個(gè)請(qǐng)求的url3我們需要通過(guò)data2取出url3,從服務(wù)器加載數(shù)據(jù)data3,data3中包含了下一個(gè)請(qǐng)求的url4發(fā)送網(wǎng)絡(luò)請(qǐng)求url4,獲取最終的數(shù)據(jù)data4上面的代碼有什么問(wèn)題嗎?正常情況下,不會(huì)有什么問(wèn)題,可以正常運(yùn)行并且獲取我們想要的結(jié)果。但是,這樣額代碼難看而且不容易維護(hù)。我們更加期望的是一種更加優(yōu)雅的方式來(lái)進(jìn)行這種異步操作。如何做呢?就是使用Promise。Promise可以以一種非常優(yōu)雅的方式來(lái)解決這個(gè)問(wèn)題。,定時(shí)器的異步事件,我們先來(lái)看看Promise最基本的語(yǔ)法。這里,我們用一個(gè)定時(shí)器來(lái)模擬異步事件:假設(shè)下面的data是從網(wǎng)絡(luò)上1秒后請(qǐng)求的數(shù)據(jù)console.log就是我們的處理方式。這是我們過(guò)去的處理方式,我們將它換成Promise代碼這個(gè)例子會(huì)讓我們感覺(jué)脫褲放屁,多此一舉首先,下面的Promise代碼明顯比上面的代碼看起來(lái)還要復(fù)雜。其次,下面的Promise代碼中包含的resolve、reject、then、catch都是些什么東西?我們先不管第一個(gè)復(fù)雜度的問(wèn)題,因?yàn)檫@樣的一個(gè)屁大點(diǎn)的程序根本看不出來(lái)Promise真正的作用。,定時(shí)器異步事件解析,我們先來(lái)認(rèn)認(rèn)真真的讀一讀這個(gè)程序到底做了什么?newPromise很明顯是創(chuàng)建一個(gè)Promise對(duì)象小括號(hào)中(resolve,reject)=)也很明顯就是一個(gè)函數(shù),而且我們這里用的是之前剛剛學(xué)習(xí)過(guò)的箭頭函數(shù)。但是resolve,reject它們是什么呢?我們先知道一個(gè)事實(shí):在創(chuàng)建Promise時(shí),傳入的這個(gè)箭頭函數(shù)是固定的(一般我們都會(huì)這樣寫)resolve和reject它們兩個(gè)也是函數(shù),通常情況下,我們會(huì)根據(jù)請(qǐng)求數(shù)據(jù)的成功和失敗來(lái)決定調(diào)用哪一個(gè)。成功還是失敗?如果是成功的,那么通常我們會(huì)調(diào)用resolve(messsage),這個(gè)時(shí)候,我們后續(xù)的then會(huì)被回調(diào)。如果是失敗的,那么通常我們會(huì)調(diào)用reject(error),這個(gè)時(shí)候,我們后續(xù)的catch會(huì)被回調(diào)。OK,這就是Promise最基本的使用了。,Promise三種狀態(tài),首先,當(dāng)我們開發(fā)中有異步操作時(shí),就可以給異步操作包裝一個(gè)Promise異步操作之后會(huì)有三種狀態(tài)我們一起來(lái)看一下這三種狀態(tài):pending:等待狀態(tài),比如正在進(jìn)行網(wǎng)絡(luò)請(qǐng)求,或者定時(shí)器沒(méi)有到時(shí)間。fulfill:滿足狀態(tài),當(dāng)我們主動(dòng)回調(diào)了resolve時(shí),就處于該狀態(tài),并且會(huì)回調(diào).then()reject:拒絕狀態(tài),當(dāng)我們主動(dòng)回調(diào)了reject時(shí),就處于該狀態(tài),并且會(huì)回調(diào).catch(),Promise鏈?zhǔn)秸{(diào)用,我們?cè)诳碢romise的流程圖時(shí),發(fā)現(xiàn)無(wú)論是then還是catch都可以返回一個(gè)Promise對(duì)象。所以,我們的代碼其實(shí)是可以進(jìn)行鏈?zhǔn)秸{(diào)用的:這里我們直接通過(guò)Promise包裝了一下新的數(shù)據(jù),將Promise對(duì)象返回了Promise.resovle():將數(shù)據(jù)包裝成Promise對(duì)象,并且在內(nèi)部回調(diào)resolve()函數(shù)Promise.reject():將數(shù)據(jù)包裝成Promise對(duì)象,并且在內(nèi)部回調(diào)reject()函數(shù),鏈?zhǔn)秸{(diào)用簡(jiǎn)寫,簡(jiǎn)化版代碼:如果我們希望數(shù)據(jù)直接包裝
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 區(qū)域間新能源開發(fā)服務(wù)的經(jīng)濟(jì)影響路徑分析-洞察闡釋
- 每周安全教育及內(nèi)容
- 建設(shè)單位工程安全管理制度
- 智能化兒童用品應(yīng)用-洞察闡釋
- 網(wǎng)吧安全生產(chǎn)事故應(yīng)急預(yù)案
- 我國(guó)有關(guān)安全生產(chǎn)法律包括
- 防汛安全責(zé)任制度
- 有關(guān)安全生產(chǎn)管理制度文本
- 安全質(zhì)量效率成本寫這四點(diǎn)
- 云計(jì)算中的大數(shù)據(jù)版本控制-洞察闡釋
- 心肺復(fù)蘇課件
- 2025至2030全球及中國(guó)企業(yè)文件共享和同步(EFSS)行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 上海金山區(qū)屬國(guó)有企業(yè)招聘筆試真題2024
- 2025至2030中國(guó)碳化硅陶瓷膜行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢研究報(bào)告
- 2025至2030中國(guó)生石灰行業(yè)市場(chǎng)深度調(diào)研及發(fā)展趨勢(shì)與投資方向報(bào)告
- 一通三防管理課件
- 2025秋二年級(jí)上冊(cè)語(yǔ)文上課課件 2 我是什么
- 胖東來(lái)總值班管理制度
- 口腔診室終末消毒流程
- 2024年廣州市荔灣區(qū)社區(qū)專職招聘考試真題
- 切口感染案例分析
評(píng)論
0/150
提交評(píng)論