PPTDay 0708-Promise的使用_第1頁
PPTDay 0708-Promise的使用_第2頁
PPTDay 0708-Promise的使用_第3頁
PPTDay 0708-Promise的使用_第4頁
PPTDay 0708-Promise的使用_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Promise,王紅元微博:coderwhy微信:372623326,什么是Promise呢?,ES6中一個(gè)非常重要和好用的特性就是Promise但是初次接觸Promise會(huì)一臉懵逼,這TM是什么東西?看看官方或者一些文章對(duì)它的介紹和用法,也是一頭霧水。Promise到底是做什么的呢?Promise是異步編程的一種解決方案。那什么時(shí)候我們會(huì)來處理異步事件呢?一種很常見的場景應(yīng)該就是網(wǎng)絡(luò)請(qǐng)求了。我們封裝一個(gè)網(wǎng)絡(luò)請(qǐng)求的函數(shù),因?yàn)椴荒芰⒓茨玫浇Y(jié)果,所以不能像簡單的3+4=7一樣將結(jié)果返回。所以往往我們會(huì)傳入另外一個(gè)函數(shù),在數(shù)據(jù)請(qǐng)求成功時(shí),將數(shù)據(jù)通過傳入的函數(shù)回調(diào)出去。如果只是一個(gè)簡單的網(wǎng)絡(luò)請(qǐng)求,那么這種方案不會(huì)給我們帶來很大的麻煩。但是,當(dāng)網(wǎng)絡(luò)請(qǐng)求非常復(fù)雜時(shí),就會(huì)出現(xiàn)回調(diào)地獄。OK,我以一個(gè)非??鋸埖陌咐齺碚f明。,網(wǎng)絡(luò)請(qǐng)求的回調(diào)地獄,我們來考慮下面的場景(有夸張的成分):我們需要通過一個(gè)url1從服務(wù)器加載一個(gè)數(shù)據(jù)data1,data1中包含了下一個(gè)請(qǐng)求的url2我們需要通過data1取出url2,從服務(wù)器加載數(shù)據(jù)data2,data2中包含了下一個(gè)請(qǐng)求的url3我們需要通過data2取出url3,從服務(wù)器加載數(shù)據(jù)data3,data3中包含了下一個(gè)請(qǐng)求的url4發(fā)送網(wǎng)絡(luò)請(qǐng)求url4,獲取最終的數(shù)據(jù)data4上面的代碼有什么問題嗎?正常情況下,不會(huì)有什么問題,可以正常運(yùn)行并且獲取我們想要的結(jié)果。但是,這樣額代碼難看而且不容易維護(hù)。我們更加期望的是一種更加優(yōu)雅的方式來進(jìn)行這種異步操作。如何做呢?就是使用Promise。Promise可以以一種非常優(yōu)雅的方式來解決這個(gè)問題。,定時(shí)器的異步事件,我們先來看看Promise最基本的語法。這里,我們用一個(gè)定時(shí)器來模擬異步事件:假設(shè)下面的data是從網(wǎng)絡(luò)上1秒后請(qǐng)求的數(shù)據(jù)console.log就是我們的處理方式。這是我們過去的處理方式,我們將它換成Promise代碼這個(gè)例子會(huì)讓我們感覺脫褲放屁,多此一舉首先,下面的Promise代碼明顯比上面的代碼看起來還要復(fù)雜。其次,下面的Promise代碼中包含的resolve、reject、then、catch都是些什么東西?我們先不管第一個(gè)復(fù)雜度的問題,因?yàn)檫@樣的一個(gè)屁大點(diǎn)的程序根本看不出來Promise真正的作用。,定時(shí)器異步事件解析,我們先來認(rèn)認(rèn)真真的讀一讀這個(gè)程序到底做了什么?newPromise很明顯是創(chuàng)建一個(gè)Promise對(duì)象小括號(hào)中(resolve,reject)=)也很明顯就是一個(gè)函數(shù),而且我們這里用的是之前剛剛學(xué)習(xí)過的箭頭函數(shù)。但是resolve,reject它們是什么呢?我們先知道一個(gè)事實(shí):在創(chuàng)建Promise時(shí),傳入的這個(gè)箭頭函數(shù)是固定的(一般我們都會(huì)這樣寫)resolve和reject它們兩個(gè)也是函數(shù),通常情況下,我們會(huì)根據(jù)請(qǐng)求數(shù)據(jù)的成功和失敗來決定調(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)我們一起來看一下這三種狀態(tài):pending:等待狀態(tài),比如正在進(jìn)行網(wǎng)絡(luò)請(qǐng)求,或者定時(shí)器沒有到時(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)用,我們在看Promise的流程圖時(shí),發(fā)現(xiàn)無論是then還是catch都可以返回一個(gè)Promise對(duì)象。所以,我們的代碼其實(shí)是可以進(jìn)行鏈?zhǔn)秸{(diào)用的:這里我們直接通過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)用簡寫,簡化版代碼:如果我們希望數(shù)據(jù)直接包裝

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論