摘要:用優(yōu)雅的方式編寫(xiě)異步代碼前言隨著互聯(lián)網(wǎng)的發(fā)展,的應(yīng)用越來(lái)越廣泛,地位也越來(lái)越重要,網(wǎng)站也發(fā)生了翻天覆地的變化。也是中的關(guān)鍵字,字面意思是異步,作用就是聲明一個(gè)異步方法。注意不能多帶帶存在,必須和異步關(guān)鍵字一起使用。
用優(yōu)雅的方式編寫(xiě)異步代碼-Eric
前言
隨著互聯(lián)網(wǎng)的發(fā)展,js的應(yīng)用越來(lái)越廣泛,地位也越來(lái)越重要,網(wǎng)站也發(fā)生了翻天覆地的變化。
到目前為止,前后臺(tái)基本徹底分離,交互都采用異步的方式,ajax、fetch...
fetch
目前大部分互聯(lián)網(wǎng)公司開(kāi)發(fā)都轉(zhuǎn)向React、Vue,前后臺(tái)交互也大都使用fetch取代ajax,而我們知道fetch的實(shí)現(xiàn)原理采用了es6中的Promise,Promise把異步請(qǐng)求變得簡(jiǎn)單優(yōu)雅,代碼示例:
fetch(url, {}) .then(response=>{}) .then(res=>{}) .catch(err=>{});
我們要處理返回結(jié)果一般這么寫(xiě):
fetch(url, {}) .then(response=>{ return response.json() }) .then(res=>{ // 結(jié)果處理 if(res.success){ // somecode... } }) .catch(err=>{});
如果處理邏輯比較多,這么寫(xiě)不直觀(guān),能不能這么寫(xiě)呢:
let res = fetch(url, {}); // 結(jié)果處理 if(res.success){ // somecode... }
結(jié)果當(dāng)然是可以的,那就是es7中的await
await & async
await 是es7中定義的一個(gè)關(guān)鍵字,可以等待Promise返回?cái)?shù)據(jù),相當(dāng)于暫停功能,await字面意思就是等待。
async也是es7中的關(guān)鍵字,字面意思是異步,作用就是聲明一個(gè)異步方法。
注意:
1、await不能多帶帶存在,必須和async(異步)關(guān)鍵字一起使用。
2、await 后面如果不是一個(gè)Promise對(duì)象的話(huà),那么不會(huì)等待哦!
代碼走一波:
// async寫(xiě)在方法前面 asyncFunc = async ()=>{ console.time(); let res = await (new Promise((resolve, reject)=>{ setTimeout(resolve.bind(this, 10), 2000); })); console.timeEnd(); // default: 2711.656982421875ms 等待Promise執(zhí)行完畢 console.log( res ); // 10 拿到了Promise的返回結(jié)果 } asyncFunc();
await 對(duì)普通異步代碼無(wú)效:
asyncFunc2 = async ()=>{ console.time(); let res = await setTimeout( ()=>{return 10}, 2000); console.timeEnd(); // default: 0.705078125ms, 說(shuō)明沒(méi)有等待setTimeout完成 console.log( res ); // 737 setTimeout定時(shí)器的返回值 } asyncFunc2();
更多操作自己去實(shí)踐吧!
擴(kuò)展
有興趣的小伙伴可以去研究下 yield 關(guān)鍵字哦, 可以暫停方法的執(zhí)行,并返回yield 后面的值
喜歡我的文章就點(diǎn)贊轉(zhuǎn)發(fā)吧!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108622.html
摘要:下面將簡(jiǎn)單地描述一下一些日常常用場(chǎng)景加深對(duì)認(rèn)識(shí)最普遍的異步操作就是請(qǐng)求我們也可以用來(lái)簡(jiǎn)單模擬異步請(qǐng)求。其中是必須的如果省略了程序就不能按預(yù)期得到結(jié)果。 前言 async/await 語(yǔ)法用看起來(lái)像寫(xiě)同步代碼的方式來(lái)優(yōu)雅地處理異步操作,但是我們也要明白一點(diǎn),異步操作本來(lái)帶有復(fù)雜性,像寫(xiě)同步代碼的方式并不能降低本質(zhì)上的復(fù)雜性,所以在處理上我們要更加謹(jǐn)慎, 稍有不慎就可能寫(xiě)出不是預(yù)期執(zhí)行的代...
摘要:下面將簡(jiǎn)單地描述一下一些日常常用場(chǎng)景加深對(duì)認(rèn)識(shí)最普遍的異步操作就是請(qǐng)求我們也可以用來(lái)簡(jiǎn)單模擬異步請(qǐng)求。其中是必須的如果省略了程序就不能按預(yù)期得到結(jié)果。 前言 async/await 語(yǔ)法用看起來(lái)像寫(xiě)同步代碼的方式來(lái)優(yōu)雅地處理異步操作,但是我們也要明白一點(diǎn),異步操作本來(lái)帶有復(fù)雜性,像寫(xiě)同步代碼的方式并不能降低本質(zhì)上的復(fù)雜性,所以在處理上我們要更加謹(jǐn)慎, 稍有不慎就可能寫(xiě)出不是預(yù)期執(zhí)行的代...
摘要:下面將簡(jiǎn)單地描述一下一些日常常用場(chǎng)景加深對(duì)認(rèn)識(shí)最普遍的異步操作就是請(qǐng)求我們也可以用來(lái)簡(jiǎn)單模擬異步請(qǐng)求。其中是必須的如果省略了程序就不能按預(yù)期得到結(jié)果。 前言 async/await 語(yǔ)法用看起來(lái)像寫(xiě)同步代碼的方式來(lái)優(yōu)雅地處理異步操作,但是我們也要明白一點(diǎn),異步操作本來(lái)帶有復(fù)雜性,像寫(xiě)同步代碼的方式并不能降低本質(zhì)上的復(fù)雜性,所以在處理上我們要更加謹(jǐn)慎, 稍有不慎就可能寫(xiě)出不是預(yù)期執(zhí)行的代...
摘要:換句話(huà)說(shuō),當(dāng)一個(gè)異步過(guò)程調(diào)用發(fā)出后,調(diào)用者不會(huì)立刻得到結(jié)果。參考文章珠峰架構(gòu)課墻裂推薦細(xì)說(shuō)異步函數(shù)發(fā)展歷程異步編程謝謝各位小伙伴愿意花費(fèi)寶貴的時(shí)間閱讀本文,如果本文給了您一點(diǎn)幫助或者是啟發(fā),請(qǐng)不要吝嗇你的贊和,您的肯定是我前進(jìn)的最大動(dòng)力。知其然知其所以然,首先了解三個(gè)概念: 1.什么是同步? 所謂同步,就是在發(fā)出一個(gè)調(diào)用時(shí),在沒(méi)有得到結(jié)果之前,該調(diào)用就不返回。但是一旦調(diào)用返回,就得到返回值了...
摘要:參考文章珠峰架構(gòu)課墻裂推薦細(xì)說(shuō)異步函數(shù)發(fā)展歷程異步編程謝謝各位小伙伴愿意花費(fèi)寶貴的時(shí)間閱讀本文,如果本文給了您一點(diǎn)幫助或者是啟發(fā),請(qǐng)不要吝嗇你的贊和,您的肯定是我前進(jìn)的最大動(dòng)力。 知其然知其所以然,首先了解三個(gè)概念: 1.什么是同步? 所謂同步,就是在發(fā)出一個(gè)調(diào)用時(shí),在沒(méi)有得到結(jié)果之前,該調(diào)用就不返回。但是一旦調(diào)用返回,就得到返回值了。換句話(huà)說(shuō),就是由調(diào)用者主動(dòng)等待這個(gè)調(diào)用的結(jié)果。此調(diào)...
閱讀 3158·2021-11-23 10:02
閱讀 3128·2021-11-16 11:53
閱讀 3104·2021-09-23 11:21
閱讀 3378·2019-08-30 13:02
閱讀 1638·2019-08-29 16:18
閱讀 1568·2019-08-29 12:55
閱讀 1467·2019-08-26 12:24
閱讀 2095·2019-08-26 10:36