Promise


Promise是什么蘑险?

1滴肿、主要用于異步計(jì)算

2、可以將異步操作隊(duì)列化佃迄,按照期望的順序執(zhí)行泼差,返回符合預(yù)期的結(jié)果

3、可以在對(duì)象之間傳遞和操作promise呵俏,幫助我們處理隊(duì)列

為什么會(huì)有Promise堆缘?

同步:一個(gè)任務(wù)執(zhí)行完畢才會(huì)執(zhí)行下一個(gè)任務(wù)

異步:可以將A任務(wù)交付給系統(tǒng),繼續(xù)做下一個(gè)任務(wù) 再通過回調(diào)函數(shù) 繼續(xù)做A剩余任務(wù), AB工作的順序 和 時(shí)間順序無關(guān) 所以叫“異步”普碎。

Promise的作用

1吼肥,主要是用來解決回調(diào)嵌套(執(zhí)行完后再去執(zhí)行某一些操作,這時(shí)候容易形成嵌套再嵌套的問題)的問題麻车,也就是常見的"回調(diào)地獄"缀皱;

?2,執(zhí)行多并發(fā)請(qǐng)求獲取數(shù)據(jù)动猬;

Promise的使用:

(1)使用new實(shí)例化一個(gè)Promise對(duì)象啤斗,Promise的構(gòu)造函數(shù)中傳遞一個(gè)參數(shù)。這個(gè)參數(shù)是一個(gè)函數(shù)枣察,該函數(shù)用于處理異步任務(wù)争占。

(2)并且傳入兩個(gè)參數(shù):resolve和reject燃逻,分別表示異步執(zhí)行成功后的回調(diào)函數(shù)和異步執(zhí)行失敗后的回調(diào)函數(shù);

(3)通過 promise.then() 處理返回結(jié)果臂痕。這里的 p 指的是 Promise實(shí)例伯襟。

?//?第一步:model層的接口封裝

????????const?promise?=?new?Promise((resolve,?reject)?=>?{

????????????//?這里做異步任務(wù)(比如ajax?請(qǐng)求接口。這里暫時(shí)用定時(shí)器代替)

????????????setTimeout(function?()?{

????????????????var?data?=?{?retCode:?0,?msg:?'hello'?};?//?接口返回的數(shù)據(jù)

????????????????if?(data.retCode?==?0)?{

????????????????????//?接口請(qǐng)求成功時(shí)調(diào)用

????????????????????resolve(data);

????????????????}?else?{

????????????????????//?接口請(qǐng)求失敗時(shí)調(diào)用

????????????????????reject({?retCode:?-1,?msg:?'network?error'?});

????????????????}

????????????},?100);

????????});

????????//?第二步:業(yè)務(wù)層的接口調(diào)用握童。這里的?data?就是?從?resolve?和?reject?傳過來的姆怪,也就是從接口拿到的數(shù)據(jù)

????????promise.then(data?=>?{

????????????//?從?resolve?獲取正常結(jié)果

????????????console.log(data);

????????}).catch(data?=>?{

????????????//?從?reject?獲取異常結(jié)果

????????????console.log(data);


promise對(duì)象的3個(gè)狀態(tài)

初始化狀態(tài)(等待狀態(tài)):pending

成功狀態(tài):fullfilled

失敗狀態(tài):rejected

promise 的基本用法

?let?promise?=?new?Promise((resolve,?reject)?=>?{

????????????resolve()

????????}).then(res?=>?{?console.log(res)?})//undefined

Promise構(gòu)造函數(shù)接收一共函數(shù)作為參數(shù),該函數(shù)有兩個(gè)參數(shù)分別為resolve和reject澡绩,調(diào)用resolve則會(huì)代表成功稽揭,調(diào)用reject則會(huì)代表失敗。

then 方法

function?greet()?{

????????????let?promise?=?new?Promise((resolve,?reject)?=>?{

????????????????let?data?=?'hello?world'

????????????????resolve(data)

????????????})

????????????return?promise

????????}?greet().then(res?=>?{?console.log(res)?})//hello?world

then方法是處理resolve和reject的回調(diào)肥卡,分別有兩個(gè)參數(shù)溪掀,參數(shù)分別是(resolve)=>{},(reject)=>{}。then方法的返回值也是一個(gè)promise步鉴,因此可以不斷的進(jìn)行鏈?zhǔn)秸{(diào)用then方法揪胃。

all方法

Promise的all方法提供了并行執(zhí)行異步操作的能力,它可以將promise數(shù)組作為參數(shù)氛琢,只有當(dāng)時(shí)所有promise都成功后喊递,才會(huì)獲取到成功結(jié)果,否則會(huì)報(bào)錯(cuò)阳似。

???function?p1()?{

????????????var?promise1?=?new?Promise(function?(resolve,?reject)?{

????????????????console.log("p1的第一條輸出語句");

????????????????resolve("p1完成");

????????????})

????????????return?promise1;

????????}

????????function?p2()?{

????????????var?promise2?=?new?Promise(function?(resolve,?reject)?{

????????????????console.log("p2的第一條輸出語句");

????????????????resolve("p2完成");

????????????})

????????????return?promise2;

????????}

????????function?p3()?{

????????????var?promise3?=?new?Promise(function?(resolve,?reject)?{

????????????????console.log("p3的第一條輸出語句");

????????????????resolve("p3完成")

????????????});

????????????return?promise3;

????????}

????????Promise.all([p1(),?p2(),?p3()]).then(function?(data)?{

????????????console.log(data);

????????})?

打印結(jié)果:

p1的第一條輸出語句

p2的第一條輸出語句

p3的第一條輸出語句

['p1完成','p2完成','p3完成']

race方法

在all中的回調(diào)函數(shù)中骚勘,等到所有的Promise都執(zhí)行完,再來執(zhí)行回調(diào)函數(shù)撮奏,race則不同它等到第一個(gè)Promise改變狀態(tài)就開始執(zhí)行回調(diào)函數(shù)俏讹。

let?P1?=?new?Promise(resolve?=>?{

????????????setInterval(()?=>?{

????????????????resolve("I\'m?P1");

????????????},?1000)

????????});

????????let?P2?=?new?Promise(resolve?=>?{

????????????setInterval(()?=>?{

????????????????resolve("I\'m?P2");

????????????},?1500)

????????});

????????Promise.race([P1,?P2])

????????????.then(value?=>?{

????????????????console.log(value)

????????????})

????????console.log('value')//value 與Promise是一起執(zhí)行的,沒有時(shí)間先后順序

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挽荡,一起剝皮案震驚了整個(gè)濱河市藐石,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌定拟,老刑警劉巖于微,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異青自,居然都是意外死亡株依,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門延窜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恋腕,“玉大人,你說我怎么就攤上這事逆瑞≤伲” “怎么了伙单?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長哈肖。 經(jīng)常有香客問我吻育,道長,這世上最難降的妖魔是什么淤井? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任布疼,我火速辦了婚禮,結(jié)果婚禮上币狠,老公的妹妹穿的比我還像新娘游两。我一直安慰自己,他們只是感情好漩绵,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布贱案。 她就那樣靜靜地躺著,像睡著了一般渐行。 火紅的嫁衣襯著肌膚如雪轰坊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天祟印,我揣著相機(jī)與錄音,去河邊找鬼粟害。 笑死蕴忆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的悲幅。 我是一名探鬼主播套鹅,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼汰具!你這毒婦竟也來了卓鹿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤留荔,失蹤者是張志新(化名)和其女友劉穎吟孙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體聚蝶,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杰妓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了碘勉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巷挥。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖验靡,靈堂內(nèi)的尸體忽然破棺而出倍宾,到底是詐尸還是另有隱情雏节,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布高职,位于F島的核電站矾屯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏初厚。R本人自食惡果不足惜件蚕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望产禾。 院中可真熱鬧排作,春花似錦、人聲如沸亚情。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽楞件。三九已至衫生,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間土浸,已是汗流浹背罪针。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留黄伊,地道東北人泪酱。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像还最,于是被迫代替她去往敵國和親墓阀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

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