promise和axios

?

[if !supportLists]第一章 [endif]Promise

Promise對(duì)象是一個(gè)代理對(duì)象(代理一個(gè)值),被代理的值在Promise對(duì)象創(chuàng)建時(shí)可能是未知的。它允許你為異步操作的成功和失敗分別綁定相應(yīng)的處理方法(handlers)狼荞。 這讓異步方法可以像同步方法那樣返回值,但并不是立即返回最終執(zhí)行結(jié)果撒璧,而是一個(gè)能代表未來出現(xiàn)的結(jié)果的promise對(duì)象

一個(gè)Promise就3種狀態(tài):pending:初始狀態(tài)喳张,既不是成功,也不是失敗狀態(tài)岂丘。fulfilled:意味著操作成功完成陵究。rejected:意味著操作失敗。

[if !supportLists]一奥帘、[endif]關(guān)于promise對(duì)象

創(chuàng)建一個(gè)promise實(shí)例铜邮,然后直接打印會(huì)報(bào)錯(cuò)

<script>????var pro = new Promise();????console.log(pro);</script>

原因就是當(dāng)創(chuàng)建一個(gè)promise實(shí)例的時(shí)候,需要在里面放一個(gè)函數(shù):

<script>????var pro = new Promise(() => {});????console.log(pro); // 打印promise實(shí)</script>

----------------------

如果在函數(shù)里面寨蹋,寫一些代碼松蒜,會(huì)發(fā)現(xiàn)內(nèi)部代碼立即執(zhí)行了

<script>????var pro = new Promise(() => {????????console.log("實(shí)例化..."); // 即執(zhí)????});</script>

----------------

在promise的函數(shù)中傳入兩個(gè)參數(shù):resolve和reject ,表示成功的狀態(tài)和失敗的狀態(tài):

<script>????var pro = new Promise((resolve, reject) => {????????console.log("實(shí)例化...");????????// resolve() // "fulfilled"????????reject() // "rejected"????});????console.log(pro);</script>

------------------

一旦進(jìn)入到成功或失敗的狀態(tài)已旧,就無法再改變狀態(tài)了:

<script>????var pro = new Promise((resolve, reject) => {????????console.log("實(shí)例化...");????????resolve() // "fulfilled" 進(jìn)入到成功狀態(tài)秸苗,reject有用了????????reject() // 會(huì)執(zhí)????});????console.log(pro);</script>

----------------------

當(dāng)異步代碼執(zhí)行成功時(shí),我們應(yīng)該調(diào)用resolve(...),resolve會(huì)把實(shí)參傳給then评姨; 當(dāng)異步代碼失敗時(shí)應(yīng)該調(diào)用reject(...)难述,reject會(huì)把實(shí)參傳給catch

<script>????var pro = new Promise((resolve, reject) => {????????var xhr = new XMLHttpRequest();????????xhr.onreadystatechange = function () {????????????if (xhr.readyState == 4) {????????????????if (xhr.status == 200) {????????????????????resolve('歐耶,成功了:' + xhr.responseText)????????????????} else {????????????????????reject('哥們吐句,失敗了:' + xhr.statusText)????????????????}????????????}????????}????????xhr.open('get', 'a.txt', true);????????xhr.send(null);????});????pro.then((successMessage) => {????????// successMessage的值是上面調(diào)用resolve(...)方法傳入的實(shí)參????????// successMessage參數(shù)不一定非要是字符串類型????????console.log('then:' + successMessage);????});????pro.catch((error) => {????????console.log(error);????})</script>


---------------------

then方法執(zhí)行完之后有一個(gè)返回值胁后,返回的是一個(gè)新的Promise對(duì)象,所以可以使用鏈?zhǔn)椒椒ɡ^續(xù)調(diào)用then方法:

<script>????var pro1 = new Promise((resolve, reject) => {????????resolve('成功1')????});????var pro2 = pro1.then((value) => {????????console.log(value); // 成功1????????// return 111????????return new Promise((resolve, reject) => {????????????// resolve('成功2')????????????reject("2")????????});????});????pro2.then((value) => {????????console.log('then2' + value); // then2:成功2????});????pro2.catch((error) => {????????console.log(error);????});????console.log(pro2);</script>


--------------------

catch除了可以接收reject信息嗦枢,還可以攔截錯(cuò)誤信息攀芯,捕獲前面鏈?zhǔn)秸{(diào)用中的錯(cuò)誤信息:

<script>????var pro1 = new Promise((resolve, reject) => {????????resolve('成功1')????});????var pro2 = pro1.then((value) => {????????console.log(1);????})????????.then((value) => {????????????console.log(2);????????????a // 寫個(gè)a報(bào)錯(cuò)????????})????????.then((value) => {????????????console.log(3);????????})????????.catch((err) => {????????????console.log(err);????????})????????.finally(() => {????????????// thencatch,我都會(huì)執(zhí)????????????console.log('執(zhí)行完了文虏!');????????})????console.log('啦啦啦~');</script>

finally方法不管前面是走的then還是catch 都會(huì)執(zhí)行侣诺。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末殖演,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子年鸳,更是在濱河造成了極大的恐慌趴久,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搔确,死亡現(xiàn)場(chǎng)離奇詭異彼棍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)膳算,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門座硕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涕蜂,你說我怎么就攤上這事华匾。” “怎么了机隙?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵蜘拉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我黍瞧,道長(zhǎng)诸尽,這世上最難降的妖魔是什么原杂? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任印颤,我火速辦了婚禮,結(jié)果婚禮上穿肄,老公的妹妹穿的比我還像新娘年局。我一直安慰自己,他們只是感情好咸产,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布矢否。 她就那樣靜靜地躺著,像睡著了一般脑溢。 火紅的嫁衣襯著肌膚如雪僵朗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天屑彻,我揣著相機(jī)與錄音验庙,去河邊找鬼。 笑死社牲,一個(gè)胖子當(dāng)著我的面吹牛粪薛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搏恤,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼违寿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼湃交!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起藤巢,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤搞莺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后掂咒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腮敌,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年俏扩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了糜工。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡录淡,死狀恐怖捌木,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嫉戚,我是刑警寧澤刨裆,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站彬檀,受9級(jí)特大地震影響帆啃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窍帝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一努潘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坤学,春花似錦疯坤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至飞苇,卻和暖如春菌瘫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背布卡。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工雨让, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人羽利。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓宫患,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子娃闲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • Promise是抽象異步處理對(duì)象以及對(duì)其進(jìn)行各種操作的組件虚汛。 API 三種類型: Constructor從構(gòu)造函數(shù)...
    szu_bee閱讀 285評(píng)論 0 1
  • 特點(diǎn) Promise能將回調(diào)分離出來,在異步操作執(zhí)行之后,用鏈?zhǔn)椒椒▓?zhí)行回調(diào),雖然es5用封裝函數(shù)也能實(shí)現(xiàn),但是如...
    一二三kkxx閱讀 616評(píng)論 0 1
  • 1. 什么是promise promise抽象異步處理對(duì)象以及對(duì)其進(jìn)行各種操作的組件.js中處理異步一般都是通過回...
    mr_zhi閱讀 185評(píng)論 0 0
  • Promise的幾種狀態(tài)? Promise有三種狀態(tài):未定(pending)皇帮、接受(fulfillment)和拒絕...
    Azur_wxj閱讀 6,648評(píng)論 7 12
  • 概念: promise是異步編程的一種解決方案. (就可以將異步操作以同步操作的流程表達(dá)出來,避免了層層嵌...
    有個(gè)人_6e81閱讀 1,114評(píng)論 0 0