ES6 Promise(2) 基本用法
創(chuàng)建Promise
Promise
?對(duì)象是由關(guān)鍵字?new
?及其構(gòu)造函數(shù)來創(chuàng)建的。該構(gòu)造函數(shù)會(huì)把一個(gè)叫做“處理器函數(shù)”(executor function)的函數(shù)作為它的參數(shù)。這個(gè)“處理器函數(shù)”接受兩個(gè)函數(shù)——resolve
?和?reject
?——作為其參數(shù)。當(dāng)異步任務(wù)順利完成且返回結(jié)果值時(shí),會(huì)調(diào)用?resolve
?函數(shù);而當(dāng)異步任務(wù)失敗且返回失敗原因(通常是一個(gè)錯(cuò)誤對(duì)象)時(shí),會(huì)調(diào)用reject
?函數(shù)。

上面的myPromise 是一個(gè)Promise對(duì)象。它將擁有Promise的一些方法。

上例運(yùn)行的結(jié)果。
按照上面的思路,如果我們想讓某個(gè)函數(shù)擁有promise的功能,只需要讓它的返回值是一個(gè)Promise對(duì)象就可以了。比如

示例1
10秒之后,在頁碼上打印當(dāng)前時(shí)間。

提示
不要嘗試著在Promise里面寫定時(shí)器,那樣是沒有效果,因?yàn)橹灰{(diào)用了resolve或reject,說明我們這個(gè)promise已經(jīng)結(jié)束了。如果想加入定時(shí)器,參見示例2.
示例2
每隔1秒,在頁碼上打印出當(dāng)前時(shí)間。

運(yùn)行效果:

示例3
ajax請(qǐng)求。下面是用Promise來實(shí)現(xiàn)ajax請(qǐng)求。

運(yùn)行結(jié)果:

為什么要用promise
011、回調(diào)地獄 + 異步同步事件調(diào)用順序帶來的雙重傷害對(duì)于Promise的執(zhí)行很好的規(guī)范了對(duì)于復(fù)雜的嵌套回調(diào)的寫法,并且對(duì)于異步事件的執(zhí)行順序也是更加清晰。
022、回調(diào)事件的分離
Promise有三種狀態(tài):未定(pending)、接受(fulfillment)和拒絕(rejection)。并且,只能由未定狀態(tài)變?yōu)榻邮軤顟B(tài),或者由未定狀態(tài)變?yōu)榫芙^狀態(tài)。
只有調(diào)用resolve或reject回調(diào)函數(shù)時(shí),這個(gè)Promise的狀態(tài)才能從未定向其他兩個(gè)狀態(tài)改變。并且可以將異步操作的函數(shù)分離出來,提高了復(fù)用性。