Promise

Promise介紹

  1. Promise是一個(gè)構(gòu)造函數(shù)墓猎,既然是構(gòu)造函數(shù)姨夹,那么我們就可以new Promise() 得到一個(gè)Promise實(shí)例肉迫;
  2. Promise是模擬一些異步操作弄跌,對(duì)一些異步操作進(jìn)行封裝。(處理一些回調(diào)地獄)
  3. 在Promise上虏两,有兩個(gè)函數(shù)愧旦,分別是resolve(成功后回調(diào)函數(shù))reject(失敗后回調(diào)函數(shù))
  4. 在Promise構(gòu)造函數(shù)的 prototype 屬性上, 有一個(gè)then() 方法, 也就是說(shuō)碘举,只要是Promise 構(gòu)造函數(shù)創(chuàng)建的實(shí)例忘瓦,都可以訪問(wèn).then()方法 , 還有一個(gè)catch()方法鏈?zhǔn)讲僮鲿r(shí)候 當(dāng)某一個(gè)Promise報(bào)錯(cuò)時(shí) 后續(xù)的Promise都會(huì)停止操作引颈;
  5. 既然Promise的實(shí)例,是一個(gè)異步操作境蜕,那么蝙场,這個(gè)異步操作的結(jié)果只有兩種狀態(tài)
    5.1 狀態(tài)1: 異步執(zhí)行成功回調(diào) resolve(success) 把成功的結(jié)果返回給調(diào)用者
    5.2 狀態(tài)2: 異步執(zhí)行失敗回調(diào) reject(err)把失敗的結(jié)果返回給調(diào)用者
    5.3 由于Promise的實(shí)例,是一個(gè)異步操作粱年,所以內(nèi)部拿到的結(jié)果后 不能return 把操作的結(jié)果返回給調(diào)用者售滤; 這個(gè)時(shí)候,只能用回調(diào)函數(shù)形式台诗,來(lái)把成功或失敗的值 返回給調(diào)用者完箩;
    6.我們可以在new 出來(lái)的promise 實(shí)例上,調(diào)用 .then() 方法拉队,【預(yù)先】為這個(gè)Promise 異步操作弊知,指定成功 resolve 和失敗后 reject 回調(diào)函數(shù)

什么時(shí)候用到異步操作呢?

  1. 網(wǎng)絡(luò)請(qǐng)求的時(shí)候粱快,要等響應(yīng)服務(wù)后秩彤,得到服務(wù)器內(nèi)容,才能回調(diào)函數(shù)

模擬ajax setTimeout 把它看作ajax
//回調(diào)地獄

   setTimeout(() => {
        console.log('Hello world');
        setTimeout(() => {
            console.log('Hello Vue.js');
            setTimeout(()=>{
                console.log('Hello javascript');
            },1000)
        },1000)
    },1000);

通過(guò)promise 解決回調(diào)地獄

   new Promise((resolve, reject) => {
        setTimeout(() => {
            //模擬ajax
            //ajax成功時(shí) 調(diào)用 resolve() 然后執(zhí)行then() 把data傳過(guò)去
            resolve('Hello World');

            //ajax失敗時(shí)調(diào)用reject() 然后執(zhí)行catch()
            reject('error')
        },1000);
    }).then((data) => {
        console.log(data);
    }).catch((error) => {
        console.log(error);
    })

Promise 鏈?zhǔn)讲僮?/h3>
new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve('111');
        }, 10)
    }).then(data => {
        console.log(data);
        return new Promise((resolve, reject) => {
            resolve(data + ' ' + '222');
        })
    }).then(data => {
        console.log(data);
        return new Promise((resolve, reject) => {
            resolve(data + ' ' +  '333')
        })
    }).then(data => {
        console.log(data);
    });

//上面鏈?zhǔn)讲僮鞔a簡(jiǎn)寫

 new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve('111');
        }, 10)
    }).then(data => {
        console.log(data);
        return Promise.resolve(data + ' ' + 222)
    }).then(data => {
        console.log(data);
        return Promise.resolve(data + ' ' + 333)
    }).then(data => {
        console.log(data);
    });

//更加的簡(jiǎn)寫

   new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve('111');
        }, 10)
    }).then(data => {
        console.log(data);
        //內(nèi)部會(huì)返回一個(gè)promise.resolve()
        //如果這里是reject 就進(jìn)入catch方法
        return Promise.reject('err');
        //return data + ' ' + 222
    }).then(data => {
        console.log(data);
        //內(nèi)部會(huì)返回一個(gè)promise.resolve()
        return data + ' ' + 333
    }).then(data => {
        console.log(data);
    }).catch(err => {
        console.log(err);
    })

Promise.all 方法使用

//判斷兩個(gè)異步是否請(qǐng)求完事哭,請(qǐng)求完后漫雷,統(tǒng)一then
// res[0] 獲取第一個(gè)resolve
// res[1] 獲取第二個(gè)resolve

    Promise.all([
        new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('res1');
            }, 100)
        }),
        new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('res2');
            }, 100)
        }),
    ]).then(res => {
        console.log(res[0]); //res1
        console.log(res[1]); //res2
    })
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鳍咱,隨后出現(xiàn)的幾起案子降盹,更是在濱河造成了極大的恐慌,老刑警劉巖谤辜,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蓄坏,死亡現(xiàn)場(chǎng)離奇詭異仅胞,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)剑辫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門干旧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人妹蔽,你說(shuō)我怎么就攤上這事椎眯。” “怎么了胳岂?”我有些...
    開(kāi)封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵编整,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我乳丰,道長(zhǎng)掌测,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任产园,我火速辦了婚禮汞斧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘什燕。我一直安慰自己粘勒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布屎即。 她就那樣靜靜地躺著庙睡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪技俐。 梳的紋絲不亂的頭發(fā)上乘陪,一...
    開(kāi)封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音雕擂,去河邊找鬼啡邑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛捂刺,可吹牛的內(nèi)容都是我干的谣拣。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼族展,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼森缠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起仪缸,我...
    開(kāi)封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贵涵,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體宾茂,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓷马,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了跨晴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欧聘。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖端盆,靈堂內(nèi)的尸體忽然破棺而出怀骤,到底是詐尸還是另有隱情,我是刑警寧澤焕妙,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布蒋伦,位于F島的核電站,受9級(jí)特大地震影響焚鹊,放射性物質(zhì)發(fā)生泄漏痕届。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一末患、第九天 我趴在偏房一處隱蔽的房頂上張望研叫。 院中可真熱鬧,春花似錦阻塑、人聲如沸蓝撇。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至虽抄,卻和暖如春走搁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背迈窟。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工私植, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人车酣。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓曲稼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親湖员。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贫悄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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

  • promise作用:為了解決回調(diào)地獄問(wèn)題,但并不能減少代碼量娘摔,將多次的嵌套變成并聯(lián)1)Promise是一個(gè)構(gòu)造函數(shù)...
    阿毛啊726閱讀 228評(píng)論 0 1
  • 一窄坦、Promise的起因 當(dāng)項(xiàng)目有需求時(shí),需要封裝一個(gè)方法,給一個(gè)要讀取文件的路徑鸭津,使用這個(gè)方法去讀取文件并把內(nèi)容...
    Welkin_qing閱讀 1,307評(píng)論 0 0
  • Promise 是一個(gè) 構(gòu)造函數(shù)彤侍,既然是構(gòu)造函數(shù), 那么逆趋,我們就可以 new Promise() 得到一個(gè) Pr...
    東邪_黃藥師閱讀 333評(píng)論 0 1
  • Promise很多同學(xué)都聽(tīng)說(shuō)過(guò)闻书,但是同學(xué)們真的了解Promise么名斟?為什么要用它,為什么要有它惠窄?以及它的出現(xiàn)為我們...
    渡一web前端閱讀 827評(píng)論 0 0
  • 夜鶯2517閱讀 127,717評(píng)論 1 9