JS基于ES6新特性async await進(jìn)行異步處理操作示例
本文實(shí)例講述了JS基于ES6新特性async await進(jìn)行異步處理操作。分享給大家供大家參考,具體如下:
我們往往在項(xiàng)目中會(huì)遇到這樣的業(yè)務(wù)需求,就是首先先進(jìn)行一個(gè)ajax請(qǐng)求,然后再進(jìn)行下一個(gè)ajax請(qǐng)求,而下一個(gè)請(qǐng)求需要使用上一個(gè)請(qǐng)求得到的數(shù)據(jù),請(qǐng)求少了還好說(shuō),如果多了,就要一層一層的嵌套,就好像有點(diǎn)callback的寫(xiě)法了,那是相當(dāng)惡心的,下面我就來(lái)講一下如何使用ES6的新特性async await進(jìn)行異步處理,使上述情況就好像寫(xiě)同步代碼一樣,首先我們先舉個(gè)例子:
先寫(xiě)上json文件:
code.json:
{ "code":0, "msg":"成功" }
person.json:
{ "code":0, "list":[ { "id":1, "name":"唐僧" }, { "id":2, "name":"孫悟空" }, { "id":3, "name":"豬八戒" }, { "id":4, "name":"沙僧" } ] }
比如我們有兩個(gè)請(qǐng)求,如下,這里用的axios:
function getCode(){ return axios.get('json/code.json'); } function getlist(params){ return axios.get('json/person.json',{params}) }
我們第二個(gè)請(qǐng)求獲取列表的時(shí)候需要使用第一個(gè)請(qǐng)求得到的code值,只有code值為0時(shí),才能請(qǐng)求,而且當(dāng)做參數(shù)傳進(jìn)去,那么我們看一下常規(guī)的做法吧
function getFinal(){ console.log("我是getFinal函數(shù)") getCode().then(function(res){ if(res.data.code == 0){ console.log(res.data.code); var params = { code:res.data.code } getlist(params).then(function(res){ if(res.data.code == 0){ console.log(res.data.list); } }) } }) } getFinal();
看結(jié)果
雖然結(jié)果出來(lái)了,可是這種寫(xiě)法真的挺難受的,下面來(lái)一個(gè)async await的寫(xiě)法
async function getResult(){ console.log("我是getResult函數(shù)") let code = await getCode(); console.log(code.data.code); if(code.data.code == 0){ var params = { code:code.data.code } let list = await getlist(params); console.log(list.data.list); } } getResult();
下面看結(jié)果
當(dāng)然還剩最后一點(diǎn),處理異常,可以加上try catch
async function getResult(){ console.log("我是getResult函數(shù)") try{ let code = await getCode(); console.log(code.data.code); if(code.data.code == 0){ var params = { code:code.data.code } let list = await getlist(params); console.log(list.data.list); } }catch(err){ console.log(err); } } getResult();
個(gè)人認(rèn)為做vue項(xiàng)目的時(shí)候,如果對(duì)于異常沒(méi)有特殊處理,可以不加try catch,因?yàn)榇蛴〕鰜?lái)的錯(cuò)誤跟vue自己報(bào)的錯(cuò)誤是一樣的,而且還是黑的字體,不如醒目的紅色來(lái)的痛快啊!當(dāng)然如果要對(duì)錯(cuò)誤進(jìn)行特殊處理,那么就加上吧
代碼風(fēng)格是不是簡(jiǎn)便了許多,而且異步代碼變成了同步代碼,下面我稍微講一下后者寫(xiě)法的代碼執(zhí)行順序
首先在 function 前面加 async 用來(lái)說(shuō)明這個(gè)函數(shù)是一個(gè)異步函數(shù),當(dāng)然,async是要和await配合使用的,第一個(gè)請(qǐng)求
let code = await getCode();
await 意思是等一下,等著getCode()
這個(gè)函數(shù)執(zhí)行完畢,得到值后再賦值給code,然后再用code的值進(jìn)行下一步操作,就是這么簡(jiǎn)單?。?!趕緊去改代碼??!
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專(zhuān)題:《javascript面向?qū)ο笕腴T(mén)教程》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
BootStrap實(shí)現(xiàn)輪播圖效果(收藏)
這篇文章主要介紹了BootStrap實(shí)現(xiàn)輪播圖效果,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12js使用ajax傳值給后臺(tái),后臺(tái)返回字符串處理方法
今天小編就為大家分享一篇js使用ajax傳值給后臺(tái),后臺(tái)返回字符串處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08TypeScript使用vscode監(jiān)視代碼編譯的過(guò)程
這篇文章主要介紹了TypeScript使用vscode監(jiān)視代碼編譯,使用tsc 文件名稱(chēng)可以將ts文件轉(zhuǎn)化為js文件,js文件可以引入在html文件中直接使用,需要的朋友可以參考下2021-12-12JS使用百度地圖API自動(dòng)獲取地址和經(jīng)緯度操作示例
這篇文章主要介紹了JS使用百度地圖API自動(dòng)獲取地址和經(jīng)緯度操作,結(jié)合實(shí)例形式分析了javascript與百度地圖API接口交互實(shí)現(xiàn)獲取地址與經(jīng)緯度相關(guān)操作技巧,需要的朋友可以參考下2019-04-04javascript中Date對(duì)象的getDay方法使用指南
這篇文章主要介紹了javascript中Date對(duì)象的getDay方法使用以及各種優(yōu)化方案,非常不錯(cuò)的文章,這里推薦給大家。2014-12-12js確認(rèn)框confirm()用法實(shí)例詳解
這篇文章主要針對(duì)js確認(rèn)框confirm()用法進(jìn)行實(shí)例講解,介紹了javascript確認(rèn)框的三種使用方法,感興趣的小伙伴們可以參考一下2016-01-01