国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

async/await異步不阻塞調(diào)用

TigerChain / 3158人閱讀

摘要:有兩個新的異步語法,一個是,,一個是,兩者我更青睞于,,原因很簡單,,語法糖讓代碼更清晰,更直觀。當(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

相關(guān)文章

  • 如何正確合理使用 JavaScript async/await !

    摘要:想閱讀更多優(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博客,一年百來篇...

    trigkit4 評論0 收藏0
  • 理解 JavaScript 的 async/await

    摘要:因為函數(shù)返回一個對象,所以可以用于等待一個函數(shù)的返回值這也可以說是在等函數(shù),但要清楚,它等的實際是一個返回值。幫我們干了啥作個簡單的比較上面已經(jīng)說明了會將其后的函數(shù)函數(shù)表達(dá)式或的返回值封裝成一個對象,而會等待這個完成,并將其的結(jié)果返回出來。 隨著 Node 7 的發(fā)布,越來越多的人開始研究據(jù)說是異步編程終級解決方案的 async/await。我第一次看到這組關(guān)鍵字并不是在 JavaSc...

    tracymac7 評論0 收藏0
  • 你真的會在async/await中捕獲異常嗎?

    摘要:在我的上一篇文章中寫到,當(dāng)使用時,如何同時捕獲到回調(diào)函數(shù)和拋出的錯誤。而對于操作則會返回一個,我們能夠輕松地通過捕獲到異常不管是回調(diào)函數(shù)還是,他們都是異步的,我們的應(yīng)用程序都不會因為發(fā)送而被阻塞。 原文鏈接:Catching without Awaiting 當(dāng)執(zhí)行一項需要等待一段時間才能返回的任務(wù)時,如果使用async/await,就顯得比較麻煩了。如果async方法還沒有得到返回值...

    baiy 評論0 收藏0
  • 深入理解async/await來處理異步

    摘要:雖然在后面,但是我先執(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...

    luzhuqun 評論0 收藏0
  • 理解async/await

    摘要:所謂異步,就是調(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)用者主動等待...

    luodongseu 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<