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