摘要:有兩個新的異步語法,一個是,,一個是,兩者我更青睞于,,原因很簡單,,語法糖讓代碼更清晰,更直觀。當(dāng)函數(shù)執(zhí)行的時候,一旦遇到就會先返回,等到異步操作完成,再接著執(zhí)行函數(shù)體內(nèi)后面的語句。
es6有兩個新的異步語法,一個是async,await,一個是promise,兩者我更青睞于async,await,原因很簡單,async,await語法糖讓代碼更清晰,更直觀。
簡單的講一下,async函數(shù)返回一個 Promise 對象,可以使用then方法添加回調(diào)函數(shù)。當(dāng)函數(shù)執(zhí)行的時候,一旦遇到await就會先返回,等到異步操作完成,再接著執(zhí)行函數(shù)體內(nèi)后面的語句。那其實就是說在async函數(shù)內(nèi),每當(dāng)遇到await關(guān)鍵字的時候,函數(shù)就是阻塞住,必須等到異步操作有結(jié)果時才會往下繼續(xù)執(zhí)行,思考下,我們關(guān)心的異步返回的結(jié)果,那么也就是說我們可以異步函數(shù)執(zhí)行的結(jié)果儲存起來,在需要的時候再去await,看下面的代碼
function asyncAfun() { return new Promise((resolove)=>{ setTimeout(function() { resolove(123); }, 3000); }) } function asyncBfun() { return new Promise((resolove)=>{ setTimeout(function() { resolove(456); }, 3000); }) } async function test () { let a = asyncAfun();//不阻塞 let b = asyncBfun();//不阻塞 let _a = await a; //這里等待a的返回 后面可以do something let _b = await b;//這里等待b的返回 后面可以do something }
那么當(dāng)你需要同時并發(fā)大量請求,并且等待所有的請求結(jié)果完成的時候可以這么寫
async function test () { let a = asyncAfun(); let b = asyncBfun(); let _a = await a; let _b = await b; Promise.all([_a,_b]).then(v=>{ console.log(v) }) }
Promise.all的作用可以去MDN查,類似的還有Promise.race
學(xué)以致用,以上
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/101144.html
摘要:想閱讀更多優(yōu)質(zhì)文章請猛戳博客一年百來篇優(yōu)質(zhì)文章等著你引入的在的異步編程中是一個極好的改進(jìn)??赡軙a(chǎn)生誤導(dǎo)一些文章將與進(jìn)行了比較,并聲稱它是下一代異步編程風(fēng)格,對此作者深表異議。結(jié)論引入的關(guān)鍵字無疑是對異步編程的改進(jìn)。 showImg(https://segmentfault.com/img/bVbjFP0?w=800&h=450); 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇...
摘要:因為函數(shù)返回一個對象,所以可以用于等待一個函數(shù)的返回值這也可以說是在等函數(shù),但要清楚,它等的實際是一個返回值。幫我們干了啥作個簡單的比較上面已經(jīng)說明了會將其后的函數(shù)函數(shù)表達(dá)式或的返回值封裝成一個對象,而會等待這個完成,并將其的結(jié)果返回出來。 隨著 Node 7 的發(fā)布,越來越多的人開始研究據(jù)說是異步編程終級解決方案的 async/await。我第一次看到這組關(guān)鍵字并不是在 JavaSc...
摘要:在我的上一篇文章中寫到,當(dāng)使用時,如何同時捕獲到回調(diào)函數(shù)和拋出的錯誤。而對于操作則會返回一個,我們能夠輕松地通過捕獲到異常不管是回調(diào)函數(shù)還是,他們都是異步的,我們的應(yīng)用程序都不會因為發(fā)送而被阻塞。 原文鏈接:Catching without Awaiting 當(dāng)執(zhí)行一項需要等待一段時間才能返回的任務(wù)時,如果使用async/await,就顯得比較麻煩了。如果async方法還沒有得到返回值...
摘要:雖然在后面,但是我先執(zhí)行繼續(xù)看控制臺原來函數(shù)返回的是一個對象,如果要獲取到返回值,我們應(yīng)該用方法,繼續(xù)修改代碼。這就是來處理異步。 目前async/await 已經(jīng)被標(biāo)準(zhǔn)化,我們需要盡快將學(xué)習(xí)進(jìn)程提上日程。先說一下async的用法,它作為一個關(guān)鍵字放到函數(shù)前面,用于表示函數(shù)是一個異步函數(shù),因為async就是異步的意思,異步函數(shù)也就意味著該函數(shù)的執(zhí)行不會阻塞后面代碼的執(zhí)行。下面寫一個as...
摘要:所謂異步,就是調(diào)用在發(fā)出后,這個調(diào)用就直接返回了,調(diào)用者不會立即得到結(jié)果,但是不會阻塞,可以繼續(xù)執(zhí)行后續(xù)操作,而被調(diào)用者執(zhí)行得到結(jié)果后通過狀態(tài)事件來通知調(diào)用者使用回調(diào)函數(shù)來處理這個結(jié)果。另外狀態(tài)的回調(diào)函數(shù)是可省略的。 首先明確一個問題,為什么 Node.js 需要異步編程? JavaScript 是單線程的,在發(fā)出一個調(diào)用時,在沒有得到結(jié)果之前,該調(diào)用就不返回,意思就是調(diào)用者主動等待...
閱讀 781·2021-11-09 09:47
閱讀 1568·2019-08-30 15:44
閱讀 1143·2019-08-26 13:46
閱讀 2107·2019-08-26 13:41
閱讀 1266·2019-08-26 13:32
閱讀 3772·2019-08-26 10:35
閱讀 3519·2019-08-23 17:16
閱讀 448·2019-08-23 17:07