ECMAScript 6---Promise對象

所謂promise碌秸,其實就是異步編程的一種解決方案。

特點:

promise對象狀態(tài)不受外界影響(由異步操作的結(jié)果決定)崭参。

  1. pending:進行中
  2. resolved(fulfilled):已完成
  3. rejected:已失敗

一旦狀態(tài)改變请琳,將不會再變(狀態(tài)凝固,保持不變)

  1. pending → resolved
  2. pending → rejected

缺點:

  1. 無法中途取消promise
  2. 如果不設置回調(diào)函數(shù)层坠,promise內(nèi)部拋出的錯誤無法反應到外部
  3. pending狀態(tài)下,無法得知進展階段

==============================================

var promise = new Promise( (resolve,reject) => {

if (/*異步操作成功*/) {

    resolve(value);

} else {

    reject(error);

}

} )

==============================================

注:Promise是一個構(gòu)造函數(shù)刁笙,用來創(chuàng)建promise實例破花。參數(shù)為一個函數(shù)谦趣,該函數(shù)有兩個參數(shù):

  1. resolve:當異步操作返回成功時調(diào)用,并將結(jié)果傳遞給回調(diào)函數(shù)
  2. reject:當異步操作返回失敗時調(diào)用旧乞,并將錯誤信息傳遞給回調(diào)函數(shù)

==============================================

promise.then ( (value) => {

//success

}, (err) => {

//failure

} )

==============================================

注:then方法可以傳遞兩個回調(diào)函數(shù)作為參數(shù)(兩個函數(shù)均接受promise對象傳出的值作為參數(shù))

  1. 第一個回調(diào)函數(shù)為Promise狀態(tài)pending → resolve時調(diào)用
  2. 第二個回調(diào)函數(shù)為Promise狀態(tài)pending → reject時調(diào)用蔚润,可選

p1和p2是兩個promise實例,當p2的resolve方法將p1作為參數(shù)時:

  1. p1為pending狀態(tài)時尺栖,p2的回調(diào)函數(shù)會等待p2狀態(tài)的改變嫡纠;
  2. p2為resolve狀態(tài)時,p2的回調(diào)函數(shù)立即調(diào)用
  3. p2為reject狀態(tài)時延赌,p2的回調(diào)函數(shù)立即調(diào)用除盏,但是此時p2的狀態(tài)無效,以p1狀態(tài)為準挫以,觸發(fā)p2回調(diào)函數(shù)中的catch方法

Promise.prototype.then()

then方法返回的是一個新的promise實例者蠕,因此可以采用鏈式寫法(前一個回調(diào)函數(shù)執(zhí)行完畢,會把返回的結(jié)果作為參數(shù)傳遞給下一個回調(diào)函數(shù)掐松,以此類推)

Promise.prototype.catch()

和.then(null,reject)等價踱侣,用于指定發(fā)生錯誤時的回調(diào)。異步操作狀態(tài)變?yōu)閞eject時大磺,調(diào)用catch方法抡句,當then方法內(nèi)拋出異常時,也會被catch方法捕獲

Promise.all()

用于將多個promise實例包裝成一個promise實例杠愧,參數(shù)為一個包含多個promise實例的數(shù)組待榔,如果數(shù)組元素不是promise實例,會先調(diào)用Promise.resolve方法轉(zhuǎn)換為promise實例

  1. p1, p2, p3均為resolve時流济,返回的p也為resolve
  2. p1, p2, p3有一個為reject時锐锣,p為reject,此時第一個被reject的返回值會傳遞給p的回調(diào)函數(shù)

Promise.race()

參數(shù)同all方法绳瘟,不同的是雕憔,當參數(shù)中的實例有一個返回率先改變狀態(tài),p的狀態(tài)便隨之改變糖声。

Promise.resolve()

將現(xiàn)有對象轉(zhuǎn)換為promise對象橘茉。

  1. 參數(shù)是一個promise實例時,不做修改返回姨丈。
  2. 參數(shù)是一個thenable(含有then方法的對象)時,會先轉(zhuǎn)換為promise對象擅腰,并立即執(zhí)行thenable對象內(nèi)的then方法蟋恬。
  3. 參數(shù)不是一個對象時,返回一個新的promise對象趁冈,狀態(tài)為resolve歼争。
  4. 當沒有參數(shù)時拜马,直接返回一個狀態(tài)為resolve的promise對象。

Promise.reject()

返回一個狀態(tài)為reject的promise對象沐绒。

done()

處于回調(diào)鏈的尾端俩莽,保證最后一個then或者catch方法拋出的錯誤可以接收到。

finally()

無論最后的狀態(tài)是哪一個乔遮,都會執(zhí)行的代碼塊扮超。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蹋肮,隨后出現(xiàn)的幾起案子出刷,更是在濱河造成了極大的恐慌,老刑警劉巖坯辩,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件馁龟,死亡現(xiàn)場離奇詭異,居然都是意外死亡漆魔,警方通過查閱死者的電腦和手機坷檩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來改抡,“玉大人矢炼,你說我怎么就攤上這事∪刚” “怎么了裸删?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長阵赠。 經(jīng)常有香客問我涯塔,道長,這世上最難降的妖魔是什么清蚀? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任匕荸,我火速辦了婚禮,結(jié)果婚禮上枷邪,老公的妹妹穿的比我還像新娘榛搔。我一直安慰自己,他們只是感情好东揣,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布志衣。 她就那樣靜靜地躺著旷偿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上借嗽,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天工三,我揣著相機與錄音澎灸,去河邊找鬼。 笑死专甩,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的钉稍。 我是一名探鬼主播涤躲,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贡未!你這毒婦竟也來了种樱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤羞秤,失蹤者是張志新(化名)和其女友劉穎缸托,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘾蛋,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡俐镐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了哺哼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佩抹。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖取董,靈堂內(nèi)的尸體忽然破棺而出棍苹,到底是詐尸還是另有隱情,我是刑警寧澤茵汰,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布枢里,位于F島的核電站,受9級特大地震影響蹂午,放射性物質(zhì)發(fā)生泄漏栏豺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一豆胸、第九天 我趴在偏房一處隱蔽的房頂上張望奥洼。 院中可真熱鬧,春花似錦晚胡、人聲如沸灵奖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓷患。三九已至,卻和暖如春遣妥,著一層夾襖步出監(jiān)牢的瞬間擅编,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工燥透, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沙咏,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓班套,卻偏偏與公主長得像肢藐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吱韭,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Promise 對象 Promise 的含義 Promise 是異步編程的一種解決方案吆豹,比傳統(tǒng)的解決方案——回調(diào)函...
    neromous閱讀 8,698評論 1 56
  • Promise對象是一種解決異步問題的方法,還有的解決方案是asyns 和 await (es7) 這么是目前的終...
    站在大神的肩膀上看世界閱讀 1,258評論 0 6
  • 一理盆、Promise的含義 Promise在JavaScript語言中早有實現(xiàn)痘煤,ES6將其寫進了語言標準,統(tǒng)一了用法...
    Alex灌湯貓閱讀 818評論 0 2
  • 目錄:Promise 的含義基本用法Promise.prototype.then()Promise.prototy...
    BluesCurry閱讀 1,488評論 0 8
  • 00、前言Promise 是異步編程的一種解決方案姨俩,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強大蘸拔。它由社區(qū)...
    夜幕小草閱讀 2,127評論 0 12