promise(es6)

1 promise含義

簡單說就是一個容器,里面保存著某個未來才會結(jié)束的事件(通常是一個異步操作的結(jié)果)Promise對象代表一個異步操作弄兜;

1 特點(diǎn)一(對象狀態(tài)不受外界影響)

三種狀態(tài):pending(進(jìn)行中)、resolved(已完成)、rejected(已失敳履辍)=》只有異步操作結(jié)果可以決定是哪一種狀態(tài);

2 特點(diǎn)二(一旦轉(zhuǎn)態(tài)改變疾忍,就不會再改變)

狀態(tài)改變的兩種可能: pending=>resolved ;pending=>rejected

3 優(yōu)點(diǎn)

有了Promise對象乔外,就可以將異步操作以同步操作的流程表達(dá)出來,避免了層層嵌套的回調(diào)函數(shù)一罩;

4 缺點(diǎn)

無法取消Promise杨幼,一旦創(chuàng)建它就立即執(zhí)行無法中途取消;
如果不設(shè)置毀掉函數(shù),promise內(nèi)部拋出的錯誤,不會反映到外部差购;
當(dāng)處于pending狀態(tài)時四瘫,無法得知目前進(jìn)展到哪一個階段;
如果某些事件不斷地反復(fù)發(fā)生欲逃,一般來說找蜜,使用 stream 模式是比部署Promise更好的選擇。

2 基本用法

promise新建后會立即執(zhí)行暖夭;then方法指定的回調(diào)函數(shù)锹杈,將在當(dāng)前腳本所有同步任務(wù)執(zhí)行完才會執(zhí)行;
如果調(diào)用resolve函數(shù)和reject函數(shù)時帶有參數(shù)迈着,那么它們的參數(shù)會傳遞給回調(diào)函數(shù)
resolve參數(shù):可能是正常值竭望,也可能是另一個promise實(shí)例;reject參數(shù)通常是Error的實(shí)例裕菠;

var p1= new Promise(function(resolve,reject){
    setTimeout(()=> reject(new Error('fail')),3000)
})
var p2= new Promise(function(resolve,reject){
    setTimeout(()=> resolve(p1),3000)
})
p2.then(result=>console.log(result+'1')).catch(error=>console.log(error+'2'))
//Error: fail2   p2返回的是另一個promise咬清,導(dǎo)致p2自己的狀態(tài)無效

3 Promise.all()

方法用于多個Promise實(shí)例,包裝成一個新的promise實(shí)例奴潘;
var p = Promise.all([p1,p2,p3]);(參數(shù)可以不是一個數(shù)組旧烧,但必須有Iterator接口,且返回的成員都是Promise實(shí)例画髓,如果參數(shù)不是promise實(shí)例掘剪,將會調(diào)用resolve方法轉(zhuǎn)換為promise實(shí)例)

p的狀態(tài)由p1,p2,p3三者全是resolve狀態(tài)才成功,否則失敗;等參數(shù)狀態(tài)都返回了才會觸發(fā)P的回調(diào)函數(shù)奈虾;

4 Promise.race()

var p = Promise.all([p1,p2,p3]);
方法用于多個Promise實(shí)例包裝成一個promise實(shí)例夺谁;參數(shù)中有一個狀態(tài)發(fā)生改變p的狀態(tài)就發(fā)生改變;

5 promise.resolve()與promise.reject()

將現(xiàn)有對象轉(zhuǎn)換為promise對象肉微;

Promise.resolve('foo')
// 等價于
new Promise(resolve => resolve('foo'))

參數(shù)是promise實(shí)例匾鸥,原封不動返回
參數(shù)時具有then方法的對象,轉(zhuǎn)換后立即執(zhí)行then方法碉纳;
參數(shù)不具有then方法或不是對象勿负,裝換后狀態(tài)為resolved;
不帶參數(shù)劳曹,直接調(diào)用回調(diào)函數(shù)奴愉,立即resolve的promise對象,是本輪時間結(jié)束時铁孵,而不是下一輪事件開始時

setTimeout(function () {
  console.log('three');
}, 0);
Promise.resolve().then(function () {
  console.log('two');
});
console.log('one');
// one
// two
// three
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锭硼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子库菲,更是在濱河造成了極大的恐慌,老刑警劉巖志膀,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熙宇,死亡現(xiàn)場離奇詭異鳖擒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)烫止,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門蒋荚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人馆蠕,你說我怎么就攤上這事期升。” “怎么了互躬?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵播赁,是天一觀的道長。 經(jīng)常有香客問我吼渡,道長容为,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任寺酪,我火速辦了婚禮坎背,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寄雀。我一直安慰自己得滤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布盒犹。 她就那樣靜靜地躺著懂更,像睡著了一般。 火紅的嫁衣襯著肌膚如雪阿趁。 梳的紋絲不亂的頭發(fā)上膜蛔,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機(jī)與錄音脖阵,去河邊找鬼皂股。 笑死,一個胖子當(dāng)著我的面吹牛命黔,可吹牛的內(nèi)容都是我干的呜呐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼悍募,長吁一口氣:“原來是場噩夢啊……” “哼蘑辑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起坠宴,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤洋魂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體副砍,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衔肢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了豁翎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片角骤。...
    茶點(diǎn)故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖心剥,靈堂內(nèi)的尸體忽然破棺而出邦尊,到底是詐尸還是另有隱情,我是刑警寧澤优烧,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布蝉揍,位于F島的核電站,受9級特大地震影響匙隔,放射性物質(zhì)發(fā)生泄漏疑苫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一纷责、第九天 我趴在偏房一處隱蔽的房頂上張望捍掺。 院中可真熱鬧,春花似錦再膳、人聲如沸挺勿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽不瓶。三九已至,卻和暖如春灾杰,著一層夾襖步出監(jiān)牢的瞬間蚊丐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工艳吠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留麦备,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓昭娩,卻偏偏與公主長得像凛篙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子栏渺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評論 2 355

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

  • Promiese 簡單說就是一個容器呛梆,里面保存著某個未來才會結(jié)束的事件(通常是一個異步操作)的結(jié)果,語法上說磕诊,Pr...
    雨飛飛雨閱讀 3,360評論 0 19
  • Promise的含義: ??Promise是異步編程的一種解決方案填物,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和...
    呼呼哥閱讀 2,171評論 0 16
  • 本文適用的讀者 本文寫給有一定Promise使用經(jīng)驗(yàn)的人纹腌,如果你還沒有使用過Promise,這篇文章可能不適合你滞磺,...
    HZ充電大喵閱讀 7,311評論 6 19
  • 00雁刷、前言Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大保礼。它由社區(qū)...
    夜幕小草閱讀 2,133評論 0 12
  • 合上書本沛励,心中久久不能平靜,恍若做了一場隔世的夢炮障、嗅到那隔岸的蘭香目派,陶醉不已。 道是什么胁赢?法是什么企蹭?道和法...
    梨子和橙閱讀 915評論 0 1