成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ES6新增語法—Promise詳解

開發 前端
promise是一個對象,從它可以獲取異步操作的消息。有all、race、reject、resolve這幾個方法,原型上有then、catch等方法。

[[417665]]

Promise介紹

promise是一個對象,從它可以獲取異步操作的消息。有all、race、reject、resolve這幾個方法,原型上有then、catch等方法。

Promise的兩個特點:

  • 對象的狀態不受外界影響。Promise對象獲取的是異步操作,有三種狀態:pending(進行中)、fulfilled(已成功)、reject(已失敗)。除了異步操作的結果,其他操作都無法改變這個狀態。
  • 一旦狀態改變,就不會再變。從pending變為fulfilled和從pending變為rejected狀態,只要處于fulfilled和rejected,狀態就不會再變。

狀態的缺點:

無法取消Promise,一旦新建它就會立即執行,無法中途取消。

如果不設置回調函數,Promise內部拋出錯誤,不會反應到外部。

當處于pending狀態時,無法得知目前進展到哪一階段。

使用語法:

  1. let p = new Promise( (resolve,reject)=>{ 
  2.  
  3. //resolve 和reject是兩個函數 
  4.  
  5. }) 
  6.  
  7. p.then
  8.  
  9. ()=>{}, // 傳入的resolve函數,resolve翻譯成中文是解決 
  10.  
  11. ()=>{} //傳入的reject函數,reject翻譯成中文是拒絕 
  12.  
  13. ).catch((reason,data)=>{ 
  14.  
  15. console.log("catch失敗執行回調拋出原因",reason) 
  16.  
  17. }) 

then方法

then方法接收兩個參數作為參數,第一個參數是Promise執行成功時的回調,第二個參數是Promise執行失敗的回調,兩個函數只會有一個被調用。

通過.then添加的回調函數,不論什么時候,都會被調用,而且可以添加多個回調函數,會一次按照順序并且獨立運行。

  1. const p =new Promise((resolve,reject)=>{ 
  2.  resolve("成功"
  3. }) 
  4. p.then((res)=>{ 
  5.  console.log(res)//返回成功 
  6. },(err)=>{ 
  7.  console.log(err) 
  8. }) 

帶有多個回調函數時

  1. const p =new Promise((resolve,reject)=>{ 
  2.  resolve(1) 
  3. }) 
  4. p.then((res1)=>{ 
  5.  console.log('res1',res1) // 1 
  6.  return res1 * 2; 
  7. }).then((res2)=>{ 
  8.  console.log('res2',res2) //2 
  9. }).then((res3)=>{ 
  10.  console.log('res3',res3) //undefined 
  11.  return Promise.resolve('resolve'
  12. }).then(res4=>{ 
  13.  console.log('res4',res4) //resolve 
  14. }) 

catch用法

與Promise對象方法then并行的還有一個catch方法,用來捕獲異常的,與try...catch類似,

  1. const p1 = new Promise((resolve,reject)=>{ 
  2.  var num = Math.random()*10 ;//隨機生成一個0-10的數字  
  3.  console.log("num",num) 
  4.  if(num > 5){ 
  5.   resolve('大于5'
  6.  }else
  7.   reject("小于5"
  8.  } 
  9. }) 
  10. p1.then(res=>{ 
  11.  console.log("res",res) // res 大于5 
  12. }).catch(err=>{ 
  13.  console.log("err",err) // err 小于5 
  14. }) 

all方法

all方法表示所有的異步操作完成后才執行回調,返回結果,返回的數據是個數組,多個請求返回的數據組合。與then方法同級。

使用語法:

  1. Promise.all([ p,p1,p2.... ]).then() 

使用實例如下:

  1. const p1 = new Promise((resolve,reject)=>{ 
  2.  resolve({ 
  3.   name:'倩倩' 
  4.  }) 
  5. }) 
  6. const p2 = new Promise((resolve,reject)=>{ 
  7.  resolve(['a','b']) 
  8. }) 
  9. const p3 = new Promise((resolve,reject)=>{ 
  10.  resolve('二傻子'
  11. }) 
  12. Promise.all([p1,p2,p3]).then(res=>{ 
  13.  console.log(res)//[{name:'倩倩'}, ['a','b'], "二傻子"
  14. }) 

race方法

all是等所有的異步操作都執行完成了再執行回調,而race方法是相反的,只要有一個執行完成,不論結果是成功還是失敗,都開始執行回調,其余的不會再進入race的回調。返回的數據取決于最早執行完畢返回的數據。

  1. const p1 = new Promise((resolve,reject)=>{ 
  2.  resolve({ 
  3.   name:'倩倩' 
  4.  }) 
  5. }) 
  6. const p2 = new Promise((resolve,reject)=>{           
  7.  setTimeout(()=>{ 
  8.   resolve(['a','b']) 
  9.  },1000) 
  10. }) 
  11. const p3 = new Promise((resolve,reject)=>{ 
  12.  setTimeout(()=>{ 
  13.   resolve('二傻子'
  14.  },2000) 
  15. }) 
  16. Promise.race([p1,p2,p3]).then(res=>{ 
  17.  console.log(res)//{name:'倩倩'
  18. }) 

為什么使用Promise?

Promise的優點

  • 指定回調函數的方式更加靈活。
  • 支持鏈式調用,可以解決回調地獄問題。回調地獄就是回調函數嵌套調用,外部回調函數異步執行的結果是嵌套的回調函數的執行條件。回調地獄的缺點是不便于閱讀和異常處理。

Promise的缺點

  • 無法取消Promise,一旦新建就會立即執行,無法暫停和取消。
  • 如果不設置回調函數,Promise內部拋出的錯誤,不會反應到外部。
  • 當處于pending(進行中)狀態時,無法得知目前進展到哪一個階段。

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2021-08-18 07:05:57

ES6Asyncawait

2021-07-30 07:10:07

ES6函數參數

2021-07-16 07:26:48

ES6javascript開發語言

2021-08-02 05:51:29

foreachES6數組

2024-06-26 08:18:08

ES6模板字符串

2022-01-26 07:18:57

ES6WeakSetMap

2024-03-07 08:53:01

前端異步Promise

2023-05-10 08:21:42

Es6Set

2021-04-25 13:18:51

Wine 6.7LinuxWindows

2023-11-23 10:21:11

ECMAScriptJavaScript

2017-10-09 18:21:20

JavaScriptES6ES8

2020-07-01 07:58:20

ES6JavaScript開發

2017-08-31 14:25:34

前端JavascriptES6

2021-06-23 10:32:24

前端ES6代碼

2020-11-16 08:10:04

ES6迭代器JavaScript

2022-07-26 09:02:15

ES6ES13ECMAScript

2023-03-01 15:39:50

JavaScrip對象屬性ES6

2023-05-28 23:49:38

JavaScrip開發

2022-01-12 15:50:24

JavaScript開發循環

2018-07-16 16:10:03

前端JavaScript面向對象
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本aa毛片a级毛片免费观看 | 91色在线| 国产一区二区三区四区hd | 一区二区三区国产 | 国产亚洲一区在线 | 天堂视频一区 | 999免费观看视频 | www国产成人免费观看视频 | 超碰国产在线 | 日韩伦理一区二区 | 欧美成人不卡 | 久久久精品高清 | 一区二区三区四区免费观看 | 精品免费在线 | 日本成人免费网站 | 网黄在线 | 中文字幕av中文字幕 | 国产精品3区 | 99亚洲精品 | 中文字幕精品一区二区三区精品 | 午夜午夜精品一区二区三区文 | 中文在线a在线 | 狠狠爱综合网 | 亚州精品天堂中文字幕 | 玖玖国产 | 欧美在线播放一区 | 黄色一级电影免费观看 | 最新中文字幕第一页视频 | 精品久久久久久久 | 黄色毛片大全 | 日韩免费一区二区 | 成人免费观看男女羞羞视频 | 宅女噜噜66国产精品观看免费 | 在线日韩中文字幕 | 婷婷久久综合 | 在线免费观看成人 | 久久久成人网 | 国产精品久久久久久吹潮 | 国产精品美女久久久久久久久久久 | 少妇特黄a一区二区三区88av | 91免费观看国产 |