国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JS中async/await實現異步調用的方法

2019-11-19 10:56:43
字體:
來源:轉載
供稿:網友

async/await多個函數關聯調用

async/await使得異步代碼看起來像同步代碼

async函數會隱式地返回一個promise,而promise的reosolve值就是函數return的值

Async/Await不需要寫.then,不需要寫匿名函數處理Promise的resolve值,也不需要定義多余的data變量,還避免了嵌套代碼

async聲明一個異步函數

await只能在async函數中使用,后面跟一個promise對象

所以在模擬異步調用函數時,函數體內返回promise

async/await缺點

async函數里,無論是Promise reject的數據還是邏輯報錯,都會被默默吞掉。所以最好把await放入try{}catch{}中,或者在async返回的promise對象中使用.cache捕獲錯誤。

實現

項目中實現三個不同的接口調用,三個接口是相互關聯的,前一個接口的返回值是后一個接口的參數,如果使用Promise實現的話,只能實現異步調用,但是無法相互關聯,也就是數據不互通,所以使用async/await實現

  • 接口調用的方法獨立封裝,參數可動態設置
  • async聲明異步方法,內部使用await關鍵字調用封裝的接口,參數可直接傳入
  • async/await相當于將Promise異步調用同步化,數據可實現關聯
  • async/await會默認返回一個Promise對象,在實際調用中使用cache捕獲錯誤

代碼實現

<script> //再此使用定時器模擬異步接口的調用 // 異步函數a function a() {  return new Promise(resolve => {   setTimeout(()=>{    resolve('a')   }, 1000)  }) } // 異步函數b,關聯a參數 function b(a) {  return new Promise(resolve => {   setTimeout(()=>{    resolve(a+'b')   }, 1000)  }) } // 異步函數c,關聯b參數 function c(b) {  return new Promise(resolve => {   setTimeout(()=>{    resolve(b+'c')   }, 1000)  }) } // 同步執行三個關聯的異步函數 async function d(){   const da = await a();   const db = await b(da);   const dc = await c(db);   return dc; } // 實際調用 d().then(res=>{  console.log(res) }).catch(err=>{  console.log(err) });</script>

總結

以上所述是小編給大家介紹的JS中async/await實現異步調用的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 潢川县| 焦作市| 招远市| 尉氏县| 柳河县| 理塘县| 阿鲁科尔沁旗| 泾阳县| 宜阳县| 阿鲁科尔沁旗| 乌鲁木齐市| 江陵县| 通许县| 敦煌市| 内江市| 灌南县| 麟游县| 清流县| 贵南县| 大丰市| 濉溪县| 陆川县| 屏东县| 翁牛特旗| 岳阳县| 江门市| 金川县| 类乌齐县| 新宾| 福鼎市| 通化市| 扎兰屯市| 色达县| 长春市| 紫云| 承德市| 友谊县| 建阳市| 上饶市| 上饶市| 花莲县|