成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

20190611-對(duì)async和await的一點(diǎn)理解

xiaolinbang / 2244人閱讀

摘要:異步函數(shù)是指通過(guò)事件循環(huán)異步執(zhí)行的函數(shù),它會(huì)通過(guò)一個(gè)隱式的返回其結(jié)果。返回值返回對(duì)象的處理結(jié)果。當(dāng)請(qǐng)求必須要請(qǐng)求完成后,才能根據(jù)請(qǐng)求的結(jié)果,進(jìn)行是否繼續(xù)請(qǐng)求的時(shí)候根據(jù)所有請(qǐng)求完成后,進(jìn)行統(tǒng)計(jì)請(qǐng)求成功失敗數(shù)量等異步操作最后的回調(diào)

首先看下這段代碼:

async function submit(){
    console.log("請(qǐng)求開(kāi)始!")
    
    let data = await fetch("127.0.0.1:8888")
        .then(res => res.json())
        .then(res => {
            console.log("請(qǐng)求成功!")
            return res
        })
        
    console.log("請(qǐng)求結(jié)束");
}

console.log("請(qǐng)求成功了么?");

執(zhí)行這這段代碼,你會(huì)發(fā)現(xiàn)控制板輸出的數(shù)據(jù)順序

"請(qǐng)求成功了么?"
"請(qǐng)求開(kāi)始!"
"請(qǐng)求成功!"
"請(qǐng)求結(jié)束!"
async 定義

MDN:

async function 聲明用于定義一個(gè)返回 AsyncFunction 對(duì)象的異步函數(shù)。異步函數(shù)是指通過(guò)事件循環(huán)異步執(zhí)行的函數(shù),它會(huì)通過(guò)一個(gè)隱式的 Promise 返回其結(jié)果。但是如果你的代碼使用了異步函數(shù),它的語(yǔ)法和結(jié)構(gòu)會(huì)更像是標(biāo)準(zhǔn)的同步函數(shù)。

通俗的講,就是「異步」。讓這個(gè)fn支持異步繼續(xù),所以首先打印出來(lái)的是

"請(qǐng)求成功了么?"

async利用了影藏的promise對(duì)象,來(lái)控制函數(shù)異步進(jìn)行,所以你在執(zhí)行async中,console會(huì)出來(lái)一個(gè)promise對(duì)象。

同時(shí)需要搭配await來(lái)阻塞內(nèi)部異步,來(lái)講操作

await 定義

MDN:

await表達(dá)式會(huì)暫停當(dāng)前「async function」的執(zhí)行,等待Pormise處理完成,若Promise正常處理,則回調(diào)的resolve函數(shù)作為await表達(dá)式的值,繼續(xù)進(jìn)行async function。
表達(dá)式

一個(gè) Promise 對(duì)象或者任何要等待的值。

返回值

返回 Promise 對(duì)象的處理結(jié)果。如果等待的不是 Promise 對(duì)象,則返回該值本身。

所以上面代碼,內(nèi)部的執(zhí)行順序是

async function submit(){
    // 開(kāi)始執(zhí)行
    console.log("請(qǐng)求開(kāi)始!")
    
    // 遇到await,等待處理結(jié)果
    let data = await fetch("127.0.0.1:8888")
        .then(res => res.json())
        .then(res => {
            // 處理完成,返回處理結(jié)果
            console.log("請(qǐng)求成功!")
            return res
        })
    
    // 等待await處理完成后,執(zhí)行。
    console.log("請(qǐng)求結(jié)束");
}
注意:如果返回值不是Promise,則把該值轉(zhuǎn)換為已經(jīng)常處理的Promise,等待處理結(jié)構(gòu)(就是拋出該值)
async function f2() {
  var y = await 20;
  console.log(y); // 20
}
f2(); 
應(yīng)用場(chǎng)景

await可以阻塞主函數(shù),直到后面的Promise對(duì)象處理完成,這就很容易的解決了按順控制異步操作。

當(dāng)B請(qǐng)求必須要A請(qǐng)求完成后,才能根據(jù)A請(qǐng)求的結(jié)果,進(jìn)行是否繼續(xù)請(qǐng)求B的時(shí)候

根據(jù)所有請(qǐng)求完成后,進(jìn)行統(tǒng)計(jì)請(qǐng)求成功、失敗數(shù)量等

異步操作最后的回調(diào)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/104621.html

相關(guān)文章

  • 【全棧之路】JAVA基礎(chǔ)課程二_數(shù)據(jù)類(lèi)型垃圾回收機(jī)制(20190611v1.0)

    摘要:,用于調(diào)用垃圾收集器,在調(diào)用時(shí),垃圾收集器將運(yùn)行以回收未使用的內(nèi)存空間。然而調(diào)用附帶一個(gè)免責(zé)聲明,無(wú)法保證對(duì)垃圾收集器的調(diào)用。所以并不能說(shuō)是完美主動(dòng)進(jìn)行了垃圾回收。 歡迎進(jìn)入JAVA基礎(chǔ)課程 博客地址:https://blog.csdn.net/houjiyu...本系列文章將主要針對(duì)JAVA一些基礎(chǔ)知識(shí)點(diǎn)進(jìn)行講解,為平時(shí)歸納所總結(jié),不管是剛接觸JAVA開(kāi)發(fā)菜鳥(niǎo)還是業(yè)界資深人士,都希...

    big_cat 評(píng)論0 收藏0
  • 如何正確合理使用 JavaScript async/await !

    摘要:想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳博客一年百來(lái)篇優(yōu)質(zhì)文章等著你引入的在的異步編程中是一個(gè)極好的改進(jìn)??赡軙?huì)產(chǎn)生誤導(dǎo)一些文章將與進(jìn)行了比較,并聲稱(chēng)它是下一代異步編程風(fēng)格,對(duì)此作者深表異議。結(jié)論引入的關(guān)鍵字無(wú)疑是對(duì)異步編程的改進(jìn)。 showImg(https://segmentfault.com/img/bVbjFP0?w=800&h=450); 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來(lái)篇...

    trigkit4 評(píng)論0 收藏0
  • 深入前端-JavaScript異步編程

    摘要:缺點(diǎn)無(wú)法取消當(dāng)處于狀態(tài)時(shí),無(wú)法得知目前進(jìn)展到哪一個(gè)階段錯(cuò)誤不能被生成器什么是函數(shù)是提供的一種異步編程解決方案,語(yǔ)法行為與傳統(tǒng)函數(shù)完全不同函數(shù)有多種理解角度。 JavaScript的執(zhí)行機(jī)制在上篇文章中進(jìn)行了深入的探討,那么既然是一門(mén)單線(xiàn)程語(yǔ)言,如何進(jìn)行良好體驗(yàn)的異步編程呢 回調(diào)函數(shù)Callbacks 當(dāng)程序跑起來(lái)時(shí),一般情況下,應(yīng)用程序(application program)會(huì)時(shí)常通...

    2json 評(píng)論0 收藏0
  • 深入前端-JavaScript異步編程

    摘要:缺點(diǎn)無(wú)法取消當(dāng)處于狀態(tài)時(shí),無(wú)法得知目前進(jìn)展到哪一個(gè)階段錯(cuò)誤不能被生成器什么是函數(shù)是提供的一種異步編程解決方案,語(yǔ)法行為與傳統(tǒng)函數(shù)完全不同函數(shù)有多種理解角度。 JavaScript的執(zhí)行機(jī)制在上篇文章中進(jìn)行了深入的探討,那么既然是一門(mén)單線(xiàn)程語(yǔ)言,如何進(jìn)行良好體驗(yàn)的異步編程呢 回調(diào)函數(shù)Callbacks 當(dāng)程序跑起來(lái)時(shí),一般情況下,應(yīng)用程序(application program)會(huì)時(shí)常通...

    raise_yang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<