1.什么是Promise
1.1Promise的含義
Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大。它由社區(qū)最早提出和實(shí)現(xiàn),ES6 將其寫進(jìn)了語言標(biāo)準(zhǔn),統(tǒng)一了用法,原生提供了Promise對(duì)象。
所謂Promise簡單一點(diǎn)講就是一個(gè)容器,里面保存著某個(gè)未來才會(huì)結(jié)束的事件(通常是一個(gè)異步操作)的結(jié)果。從語法上說,Promise 是一個(gè)對(duì)象,從它可以獲取異步操作的消息。Promise 提供統(tǒng)一的 API,各種異步操作都可以用同樣的方法進(jìn)行處理。
1.2 Promise兩個(gè)特點(diǎn)
1.對(duì)象的狀態(tài)不受外界影響,Promise對(duì)象對(duì)表一個(gè)一步操作,有三種狀態(tài):pedding(進(jìn)行中)/fulfilled(已成功)/ rejected(已失?。?。只有一步操作的結(jié)果可以決定當(dāng)前是哪一個(gè)狀態(tài),這也是Promise名字的由來,它的英語意思就是“承諾”,表示其他手段無法改變。
2.一旦狀態(tài)改變,狀態(tài)就不會(huì)再變,任何時(shí)候都可以得到這個(gè)結(jié)果。Promise的狀態(tài)只有兩種改變方式:pedding-fulfilled或pedding-rejected。只有這兩種情況發(fā)生,不會(huì)再改變,會(huì)一直保持這個(gè)結(jié)果,這是稱為resolved(已定型)
1.3Promise的缺點(diǎn)
1.無法取消Promise,一旦新建就會(huì)馬上執(zhí)行
2.如果不設(shè)置回掉函數(shù),Promise內(nèi)部會(huì)拋出錯(cuò)誤,不會(huì)反應(yīng)到外部
3.處于Promise狀態(tài)時(shí),不知道進(jìn)行到哪一步了
2.基礎(chǔ)用法
ES6規(guī)定,Promise對(duì)象是一個(gè)構(gòu)造函數(shù),用來生成一個(gè)Promise實(shí)例
下面創(chuàng)造一個(gè)Promise實(shí)例:
let promise=new Promite(function(resolve, reject){
if (/* 異步操作成功 */){
resolve(value);
} else {
reject(error);
}
});