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

ES6新增語法—Async...Await詳解

開發 前端
async的意思是“異步”,顧名思義就是有關異步操作的關鍵字,async 是 ES7 才有的,與我們之前說的Promise、Generator有很大的關聯。

[[418157]]

 什么是async

async的意思是“異步”,顧名思義就是有關異步操作的關鍵字,async 是 ES7 才有的,與我們之前說的Promise、Generator有很大的關聯。

使用語法:

  1. async function name(param){ 
  2.  
  3. param //傳遞給函數的參數名稱 
  4.  
  5. statements //函數體 
  6.  
  7.  
  8. name().then(function(res){ 
  9.  
  10. res//異步操作返回的結果 
  11.  
  12. }) 

async 函數返回一個Promise對象,可以使用then方法添加回調函數。具體實例如下:

  1. async function show(){ 
  2.  return {a:12,b:15} 
  3. console.log(show())//Promise {<fulfilled>: {…}} 
  4. show().then(res=>{ 
  5.  console.log("res",res) 
  6. }) 

什么是await

await關鍵字存在async函數表達式中,用于等待Promise對象,暫停執行,等到異步操作完成后,恢復async函數的執行并返回解析值。如果把await放在asnyc函數體外,會報語法錯誤。

使用語法:

  1. asnyc function name(){ 
  2.  
  3. returnValue = await expression; 
  4.  

expression 是一個Promise對象或一個需要等待的值,針對所跟不同表達式,有兩種處理方式:

對于Promise對象,await會阻塞主函數執行,等待Promise對象執行resolve之后,resolve返回值作為await表達式運算結果,然后繼續向下執行。

對于非Promise對象,可以是字符串、布爾值、數值以及普通函數等。await直接返回對應的值,而不是等待其執行結果。

await等待Promise對象實例如下:

  1. async function test1(){ 
  2.  console.log("執行"
  3.  return new Promise((resolve,reject)=>{ 
  4.   setTimeout(()=>{ 
  5.    console.log("延遲3秒之后返回成功"
  6.    resolve({a:'1'}) 
  7.   },3000) 
  8.  })   
  9. async function test2(){ 
  10.  let x = await test1() 
  11.  console.log("x",x)//{a: "1"
  12.  return x 
  13. test2().then(function(res){ 
  14.   console.log("res",res)//{a: "1"
  15. }) 

await 跟 普通函數 實例如下:

  1. function test3(){ 
  2.  console.log("普通函數"
  3. async function test4(){ 
  4.  await test3() 
  5.  console.log("直接執行"
  6. test4() 

捕獲異常

上述的await后跟Promise對象,我們知道Promise有兩種狀態,resolved() 和 rejected() ,如果Promise對象變為rejected,會如何處理?

  1. function testAwait(){ 
  2.  return Promise.reject("error"); 
  3. async function test1(){ 
  4.  await testAwait(); 
  5.  console.log("test1");//沒有打印 
  6. test1().then(v=>{ 
  7.  console.log(v); 
  8. }).catch(e=>{ 
  9.  console.log(e);//"error" 
  10. }) 

從上實例執行結果發現,返回的reject狀態被外層的catch捕獲,然后終止了后面的執行。但是在有些情況下,即使出錯了我們還是繼續執行,而不是中斷,此時我們借助try...catch捕獲內部異常。

  1. function test1(){ 
  2.  return new Promise((resolve,reject)=>{ 
  3.  reject("error"
  4.  }) 
  5. async function test2(){ 
  6.  try{ 
  7.   await test1() 
  8.  }catch(e){ 
  9.   console.log("報錯",e) 
  10.  } 
  11. test2().then((res)=>{ 
  12.  console.log("執行成功",res) // 打印:執行成功undefined 
  13. }).catch(err=>{ 
  14.  console.log('err',err) 
  15. }) 

Generator與async對比:

  • async利用await阻塞原理,代替了Generator的 yield 。
  • async 相比Generator 不需要 run 流程函數,完美地實現了異步流程。

從 Promise 到 Generator , 再到 async ,對于異步編程的解決方案越來越完美,這就是ES6不斷發展的魅力所在。

 

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

2021-08-16 07:05:58

ES6Promise開發語言

2022-06-13 07:36:47

useEffectHooks

2021-07-30 07:10:07

ES6函數參數

2021-07-16 07:26:48

ES6javascript開發語言

2021-08-02 05:51:29

foreachES6數組

2021-06-28 07:27:43

AwaitAsync語法

2021-06-15 05:36:45

Gulpawaitasync

2024-06-26 08:18:08

ES6模板字符串

2017-04-10 15:57:10

AsyncAwaitPromise

2022-01-26 07:18:57

ES6WeakSetMap

2022-11-21 09:01:00

Swift并發結構

2016-11-22 11:08:34

asyncjavascript

2014-07-15 10:31:07

asyncawait

2023-05-10 08:21:42

Es6Set

2012-07-22 15:59:42

Silverlight

2023-10-08 10:21:11

JavaScriptAsync

2021-07-20 10:26:12

JavaScriptasyncawait

2023-07-28 07:31:52

JavaScriptasyncawait

2024-12-30 08:22:35

2022-08-27 13:49:36

ES7promiseresolve
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美成人激情 | 欧美三级在线 | 国产精品久久久久久久久久久久久 | 51ⅴ精品国产91久久久久久 | 精品一区二区三区四区在线 | 国产精品毛片av一区 | 欧美1区2区 | 91综合网 | 69亚洲精品 | 日韩在线免费视频 | 7777精品伊人久久精品影视 | 亚洲福利一区二区 | 婷婷精品 | 久久久999成人 | 亚洲视频一区在线播放 | 久久久久久久国产 | 欧美一级在线观看 | 麻豆一区 | 午夜小视频在线观看 | 欧美日韩在线视频一区二区 | www.操com| 性生生活大片免费看视频 | 日韩精品视频一区二区三区 | av免费在线观看网站 | www精品| 天天综合久久 | 亚洲欧美日韩在线 | 免费观看羞羞视频网站 | 在线观看黄色大片 | 久久久夜色精品亚洲 | 久久视频一区 | 色视频网站免费 | av黄色片在线观看 | 欧美亚洲激情 | 日韩欧美一级片 | 丝袜 亚洲 另类 欧美 综合 | 黄网站涩免费蜜桃网站 | 一区二区三区四区国产 | 日日做夜夜爽毛片麻豆 | 精品中文字幕一区二区 | 亚洲国产成人精品女人久久久 |