ES6 Promise 執(zhí)行流程

promise

前兩天遇到一個問題,讓多個接口全部都完成慈参,然后進(jìn)行某項操作呛牲,于是就在網(wǎng)上看了一個視頻,看了下基礎(chǔ)用法驮配,個人覺得講的不錯娘扩,就記錄下來了

promise分兩種階段, 三種狀態(tài)

一、 unsettled(未決階段)

1.unsettled階段只有一個狀態(tài)padding,  padding是掛起狀態(tài), 表示等待

二壮锻、 settled(已決階段)有兩種狀態(tài)

1.resolved  (成功狀態(tài))
  resolve 是從未決推向已決的resolved狀態(tài)過程叫做resolve
  resolved 成功后的處理稱之為thenable

2.rejected (失敗狀態(tài))
  reject 從未決推向已決的rejected狀態(tài)過程叫做reject

  rejected 錯誤后的處理稱之為catchable

看下圖很容易理解

promise.jpg

只要熟悉了流程琐旁,代碼上面就簡單多了

  1. 單獨使用

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Promise</title>
    <link rel="stylesheet" href="">
</head>

<body>

    <script>
        var pos = new Promise((resolve, reject) => { // 創(chuàng)建promise構(gòu)造函數(shù)

            var oReq = new XMLHttpRequest();

            oReq.onreadystatechange = function () { // 在發(fā)起請求的時候是未決階段,padding狀態(tài)
                if (this.readyState === 4) {
                    if (this.status === 200) {
                        resolve(this.responseText); // 得到結(jié)果后 推向已決階段躯保,如果是成功推向 resolve狀態(tài)
                    } else {
                        reject(this); //如果是失敗旋膳,推向已決狀態(tài) reject
                    }
                }
            };

            oReq.open("GET", "http://47.240.11.236:8080/json.json", true);
            oReq.send();
        });


        pos.then(res => { // resolved 成功后的處理稱之為 thenable
            console.log(res);
        });
        pos.catch(err => { // rejected 成功后的處理稱之為 catchable
            console.log(err) // 錯誤處理
        });


        // then 和 catch 還有別的寫法,以下代碼等同于上面
        // pos.then(res => {
        //     console.log(res);
        // }, err => {
        //     console.log(res);
        // });
    </script>

</body>

</html>


Promise.all 使用

等待兩個接口同時完成后執(zhí)行

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Promise.all</title>
    <link rel="stylesheet" href="">
</head>

<body>

    <script>
        // 創(chuàng)建pos1
        var pos1 = new Promise((resolve, reject) => { // 創(chuàng)建promise構(gòu)造函數(shù)

            var oReq = new XMLHttpRequest();

            oReq.onreadystatechange = function () { // 在發(fā)起請求的時候是未決階段途事,padding狀態(tài)
                if (this.readyState === 4) {
                    if (this.status === 200) {
                        resolve(this.responseText); // 得到結(jié)果后 推向已決階段,如果是成功推向 resolve狀態(tài)
                    } else {
                        reject(this); //如果是失敗擅羞,推向已決狀態(tài) reject
                    }
                }
            };

            oReq.open("GET", "http://47.240.11.236:8080/json.json", true);
            oReq.send();
        });

        // 創(chuàng)建pos2
        var pos2 = new Promise((resolve, reject) => { // 創(chuàng)建promise構(gòu)造函數(shù)

            var oReq = new XMLHttpRequest();

            oReq.onreadystatechange = function () { // 在發(fā)起請求的時候是未決階段尸变,padding狀態(tài)
                if (this.readyState === 4) {
                    if (this.status === 200) {
                        resolve(this.responseText); // 得到結(jié)果后 推向已決階段,如果是成功推向 resolve狀態(tài)
                    } else {
                        reject(this); //如果是失敗减俏,推向已決狀態(tài) reject
                    }
                }
            };

            oReq.open("GET", "http://47.240.11.236:8080/json.json", true);
            oReq.send();
        });

        // Promise.all
        Promise.all([pos1, pos2]).then(res => { // 等待 pos1 和 pos2 同時成功之后執(zhí)行
            console.log(res[0]);
            console.log(res[1]);
        })
    </script>

</body>

</html>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末召烂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子娃承,更是在濱河造成了極大的恐慌奏夫,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件历筝,死亡現(xiàn)場離奇詭異酗昼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)梳猪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門麻削,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人春弥,你說我怎么就攤上這事呛哟。” “怎么了匿沛?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵扫责,是天一觀的道長。 經(jīng)常有香客問我逃呼,道長鳖孤,這世上最難降的妖魔是什么借帘? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮淌铐,結(jié)果婚禮上肺然,老公的妹妹穿的比我還像新娘。我一直安慰自己腿准,他們只是感情好际起,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吐葱,像睡著了一般街望。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弟跑,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天灾前,我揣著相機(jī)與錄音,去河邊找鬼孟辑。 笑死哎甲,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的饲嗽。 我是一名探鬼主播炭玫,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼貌虾!你這毒婦竟也來了吞加?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤尽狠,失蹤者是張志新(化名)和其女友劉穎衔憨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袄膏,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡践图,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了哩陕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片平项。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖悍及,靈堂內(nèi)的尸體忽然破棺而出闽瓢,到底是詐尸還是另有隱情,我是刑警寧澤心赶,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布扣讼,位于F島的核電站,受9級特大地震影響缨叫,放射性物質(zhì)發(fā)生泄漏椭符。R本人自食惡果不足惜荔燎,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望销钝。 院中可真熱鬧有咨,春花似錦、人聲如沸蒸健。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽似忧。三九已至渣叛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盯捌,已是汗流浹背淳衙。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留饺著,地道東北人箫攀。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像瓶籽,于是被迫代替她去往敵國和親匠童。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355