Promise方法運(yùn)用

文章主要涉及關(guān)于promise的方法使用,不會(huì)涉及太多理論性的東西,簡(jiǎn)單的講講它的方法調(diào)用,好廢話不多說(shuō),直接看代碼

本章涉及以下幾點(diǎn)

  • 如何創(chuàng)建一個(gè)Promise對(duì)象
  • 參數(shù)講解
  • 鏈?zhǔn)秸{(diào)用
  • catch()捕捉異常
  • Promise.all()方法講解
  • Promise.race() 方法講解
  • 手動(dòng)的更改狀態(tài) Promise.resolve() | Promise.reject()

如何創(chuàng)建promise對(duì)象

創(chuàng)建一個(gè)promise對(duì)象很簡(jiǎn)單 直接看代碼

const p1 = new Promise((resolve,reject) => {
    const value = 'hello';
    resolve(value);
});

像上面這樣就簡(jiǎn)單的創(chuàng)建了一個(gè)promise對(duì)象


參數(shù)講解

const p1 = new Promise((resolve,reject) => {
    if(true){
            resolve('success')
   }else{
          reject('err')
    }
});

上面的例子中傳了兩個(gè)參數(shù):

  • reslove 成功的狀態(tài)
  • reject 失敗的狀態(tài)

他們兩個(gè)執(zhí)行的方法里都可以傳一個(gè)值,即成功傳入和失敗傳入 。下面我們看下鏈?zhǔn)秸{(diào)用


鏈?zhǔn)秸{(diào)用

先看一段代碼 :

const p1 = new Promise((resolve,reject) => {
    const value = 'hello';
    resolve(value);  // 此時(shí)觸發(fā)成功 
       //reject(value);  // 如果是失敗 同時(shí)我們也傳入value
});

p1.then(data => {
    console.log(data);  // hello
    return data+'world';
}, err => {
    console.log(err);   // 返回的是 reject(value) 的值
    return err+'err';
}).then(data => {
    console.log(data); // helloworld 繼續(xù)上一次data的返回值  如果沒(méi)有 就返回undefined
},err => {
    console.log(err);       // helloerr 同理 繼續(xù)返回上一次err的返回值
})

通過(guò)代碼我們很容易理解它們的作用


catch 捕捉異常

通常我們不會(huì)在then方法多傳入一個(gè)參數(shù)而是用catch來(lái)捕捉錯(cuò)誤的信息 繼續(xù)上面的例子

p1.then(data => {
    console.log(data);
    return data+'world';
}).catch(err => {
    console.log(err);  // hello
    return "reject";
}).then(data => {
    console.log(data);
}).catch(err => {
    console.log(err);  // reject 
})

Promise.all()方法

它傳入一個(gè)promise對(duì)象的列表 直接看代碼


const arr = [1,2,3,4];

const promiseArr = arr.map(arg => {
    return new Promise((resolve,reject) => {
        if(arg) {
            resolve(arg*2);
        }else{
            reject('no value');
        }
    })
});



Promise.all(promiseArr).then(data => {
    console.log(data);  // [2,4,6,8]
}).catch(err => {
    console.log(err); 
})


Promise.race()方法

同樣的它傳入的也是promise對(duì)象列表 不過(guò)他們執(zhí)行順序是按照誰(shuí)快 誰(shuí)先輸出

const pro1 = new Promise((resolve,reject) => {
    setTimeout(resolve,100,'1');
});

const pro2 = new Promise((resolve,reject) => {
    setTimeout(resolve,200,'2');
});

const pro3 = new Promise((resolve,reject) => {
    setTimeout(resolve,300,'3');
});

const pro4 = new Promise((resolve,reject) => {
    setTimeout(resolve,10,'4');
});


Promise.race([pro4,pro1,pro2,pro3]).then(data => {
    console.log(data);  // 1   輸出最快的那個(gè)
}).catch(err => {
    console.log(err);
})

兩種實(shí)例狀態(tài)

Promise.resolve() | Promise.reject() 兩個(gè)方法很容易理解 即手動(dòng)去改變它們的狀態(tài):

const p_1 = Promise.resolve('success');

p_1.then(data => {
    console.log(data);   // success
})

const p_2 = Promise.reject('err');

p_2.then(data => {
    console.log(data);  
}).catch(err => {
    console.log(err);  // err
})

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Promise 對(duì)象 Promise 的含義 Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函...
    neromous閱讀 8,837評(píng)論 1 56
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 8,780評(píng)論 0 29
  • //本文內(nèi)容起初摘抄于 阮一峰 作者的譯文,用于記錄和學(xué)習(xí),建議觀者移步于原文 概念: 所謂的Promise,...
    曾經(jīng)過(guò)往閱讀 1,320評(píng)論 0 7
  • Promise對(duì)象是一種解決異步問(wèn)題的方法,還有的解決方案是asyns 和 await (es7) 這么是目前的終...
    站在大神的肩膀上看世界閱讀 1,337評(píng)論 0 6
  • “你與我的故事,僅此而已” 腳下的葉子已是干枯,踩上去就聽(tīng)到一陣支離破碎的聲音。 他快步的走著。 他走的很快,但他...
    曳涂閱讀 306評(píng)論 3 1

友情鏈接更多精彩內(nèi)容