2022-02-06 promise

promise

Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理且更強(qiáng)大。它最早由社區(qū)提出并實(shí)現(xiàn),ES6將其寫(xiě)進(jìn)了語(yǔ)言標(biāo)準(zhǔn),統(tǒng)一了用法,并原生提供了Promise對(duì)象。

  • 含義: Promise是異步編程的一種解決方案,
  • 優(yōu)點(diǎn): 相比傳統(tǒng)回調(diào)函數(shù)和事件更加合理和優(yōu)雅,Promise是鏈?zhǔn)骄幊蹋ê竺鏁?huì)詳細(xì)講述),有效的解決了令人頭痛的回調(diào)地獄問(wèn)題,Promise的結(jié)果有成功和失敗兩種狀態(tài),只有異步操作的結(jié)果,可以決定當(dāng)前是哪一種狀態(tài),外界的任何操作都無(wú)法改變這個(gè)狀態(tài)
  • 基本用法:
    我們用Promise的時(shí)候一般是包在一個(gè)函數(shù)中,在需要的時(shí)候去運(yùn)行這個(gè)函數(shù),如:
function p1(){
  return new promise((resolve,reject)=>{
  // 一些邏輯代碼
  if(true){ 
      resolve()
  }else{
      reject();
  }
})
} 
// then 是一個(gè)函數(shù)。有兩個(gè)參數(shù),第一個(gè)參數(shù)就是接收resolve返回的數(shù)據(jù)。第二個(gè)參數(shù)接收reject返回的數(shù)據(jù)。
p1().then((data)=>{
    // 接收resolve 返回的數(shù)據(jù)
},(data)=>{
    // 接收reject的返回的數(shù)據(jù)
});
// catch  // 接收reject傳來(lái)的數(shù)據(jù)或者捕捉到then()中的運(yùn)行報(bào)錯(cuò)時(shí),做些什么
p1().catch(()=>{
  
})
// 不管什么狀態(tài)都會(huì)執(zhí)行到這
p.finally(()=>{

})

常用API

  1. resolve 返回異步操作成功的結(jié)果
  2. reject 返回異步操作失敗的結(jié)果
  3. then 執(zhí)行Promise狀態(tài)是成功的操作
  4. catch 執(zhí)行Promise狀態(tài)是失敗的操作
  5. finally 不管Promise狀態(tài)是成功或失敗都執(zhí)行的操作

Promise.all
Promise.all方法用于將多個(gè) Promise 實(shí)例,包裝成一個(gè)新的 Promise 實(shí)例。

function p1(){
  return new Promise((resolve)=>{
   console.log("打印p1");
    resolve("p1");
  })
}
function p2(){
  return new Promise((resolve)=>{
   console.log("打印p2");
    resolve("p2");
  })
}
 function p3(){
  return new Promise((resolve)=>{
   console.log("打印p3");
    resolve("p3");
  })
}

const p = Promise.all([p1(), p2(), p3()]).then((datas){
    console.log(data);
})

//打印p1
//打印p2
//打印p3
//["p1", "p2", "p3"]
p的狀態(tài)由p1、p2、p3決定,分成兩種情況。
(1)只有p1、p2、p3的狀態(tài)都變成fulfilled,p的狀態(tài)才會(huì)變成fulfilled,此時(shí)p1、p2、p3的返回值組成一個(gè)數(shù)組,傳遞給p的回調(diào)函數(shù)。
(2)只要p1、p2、p3之中有一個(gè)被rejected,p的狀態(tài)就變成rejected,此時(shí)第一個(gè)被reject的實(shí)例的返回值,會(huì)傳遞給p的回調(diào)函數(shù)。
?著作權(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)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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