日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
ES6新增語(yǔ)法—Async...Await詳解

[[418157]]

 什么是async

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

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供東昌府企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、HTML5建站、小程序制作等業(yè)務(wù)。10年已為東昌府眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。

使用語(yǔ)法:

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

async 函數(shù)返回一個(gè)Promise對(duì)象,可以使用then方法添加回調(diào)函數(shù)。具體實(shí)例如下:

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

什么是await

await關(guān)鍵字存在async函數(shù)表達(dá)式中,用于等待Promise對(duì)象,暫停執(zhí)行,等到異步操作完成后,恢復(fù)async函數(shù)的執(zhí)行并返回解析值。如果把a(bǔ)wait放在asnyc函數(shù)體外,會(huì)報(bào)語(yǔ)法錯(cuò)誤。

使用語(yǔ)法:

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

expression 是一個(gè)Promise對(duì)象或一個(gè)需要等待的值,針對(duì)所跟不同表達(dá)式,有兩種處理方式:

對(duì)于Promise對(duì)象,await會(huì)阻塞主函數(shù)執(zhí)行,等待Promise對(duì)象執(zhí)行resolve之后,resolve返回值作為await表達(dá)式運(yùn)算結(jié)果,然后繼續(xù)向下執(zhí)行。

對(duì)于非Promise對(duì)象,可以是字符串、布爾值、數(shù)值以及普通函數(shù)等。await直接返回對(duì)應(yīng)的值,而不是等待其執(zhí)行結(jié)果。

await等待Promise對(duì)象實(shí)例如下:

 
 
 
  1. async function test1(){ 
  2.  console.log("執(zhí)行") 
  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 跟 普通函數(shù) 實(shí)例如下:

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

捕獲異常

上述的await后跟Promise對(duì)象,我們知道Promise有兩種狀態(tài),resolved() 和 rejected() ,如果Promise對(duì)象變?yōu)閞ejected,會(huì)如何處理?

 
 
 
  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. }) 

從上實(shí)例執(zhí)行結(jié)果發(fā)現(xiàn),返回的reject狀態(tài)被外層的catch捕獲,然后終止了后面的執(zhí)行。但是在有些情況下,即使出錯(cuò)了我們還是繼續(xù)執(zhí)行,而不是中斷,此時(shí)我們借助try...catch捕獲內(nèi)部異常。

 
 
 
  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("報(bào)錯(cuò)",e) 
  10.  } 
  11. test2().then((res)=>{ 
  12.  console.log("執(zhí)行成功",res) // 打印:執(zhí)行成功undefined 
  13. }).catch(err=>{ 
  14.  console.log('err',err) 
  15. }) 

Generator與async對(duì)比:

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

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

 


當(dāng)前標(biāo)題:ES6新增語(yǔ)法—Async...Await詳解
網(wǎng)頁(yè)路徑:http://www.5511xx.com/article/cosccho.html