成人免费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

2017-10-09 18:21:20

JavaScriptES6ES8

2023-11-23 10:21:11

ECMAScriptJavaScript

2021-06-23 10:32:24

前端ES6代碼

2020-07-01 07:58:20

ES6JavaScript開發

2017-08-31 14:25:34

前端JavascriptES6

2020-11-16 08:10:04

ES6迭代器JavaScript

2023-03-01 15:39:50

JavaScrip對象屬性ES6

2023-05-28 23:49:38

JavaScrip開發

2022-07-26 09:02:15

ES6ES13ECMAScript

2018-07-16 16:10:03

前端JavaScript面向對象

2022-01-12 15:50:24

JavaScript開發循環
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人精品一区二三区在线观看 | 亚洲精品一区中文字幕 | 国产精品欧美一区二区三区不卡 | 自拍 亚洲 欧美 老师 丝袜 | 成人在线精品视频 | 久久国产精品一区二区三区 | 精品国产久| 成人在线观 | 一区二区三区播放 | 国产亚洲精品成人av久久ww | 国产香蕉视频 | 免费播放一级片 | 亚洲视频在线播放 | 国产精品夜夜夜一区二区三区尤 | 亚洲国产精品美女 | 中文字幕一区在线观看视频 | 国产亚洲久 | 国产精品国产a级 | 日本精品一区二区三区在线观看 | 欧美在线亚洲 | 亚洲综合日韩精品欧美综合区 | 久久亚洲一区二区三区四区 | 91av免费看| 91中文字幕在线 | 欧美视频免费在线 | 最新中文字幕第一页视频 | 精久久久| 中文在线一区二区 | 久久福利网站 | 在线中文字幕第一页 | 中文字幕一区二区三区精彩视频 | 99精品视频在线观看免费播放 | 日韩av一二三区 | 久久出精品 | 亚洲精品天堂 | 免费观看一级毛片 | 奇米视频777 | 国产成人aⅴ | 欧美一区二区三区在线视频 | 色视频欧美 | 黄色片免费看 |