国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

async和await

這篇具有很好參考價(jià)值的文章主要介紹了async和await。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Node.JS官方文檔:https://nodejs.dev/en/

創(chuàng)建異步函數(shù),并返回相關(guān)數(shù)值:

一般方式創(chuàng)建

/*
    函數(shù)直接通過返回Promise成為異步函數(shù)
    異步函數(shù):返回promise的函數(shù)稱之為異步函數(shù)
*/ 
function fn(){
    
    return Promise.resolve(10)
}

// 讀取結(jié)果需要通過then去讀取
fn().then(r => {
    console.log(r)
})

通過async方式創(chuàng)建:

/*
    通過async可以快速的創(chuàng)建異步函數(shù)
*/

/*
    通過async可以來創(chuàng)建一個(gè)異步函數(shù),fn2() 此時(shí)就是一個(gè)異步函數(shù)
        異步函數(shù)的返回值回自動(dòng)封裝到一個(gè)Promise中返回
*/
async function fn2(){
    return "async返回的數(shù)據(jù)10"
}

// 讀取結(jié)果需要通過then去讀取
fn2().then(r => {
    console.log(r)
})

在async聲明的函數(shù)中可以使用await關(guān)鍵字來調(diào)用異步函數(shù)


/*
    在async聲明的異步函數(shù)中可以使用await關(guān)鍵字來調(diào)用異步函數(shù)
*/


// 創(chuàng)建一個(gè)函數(shù)計(jì)算 a + b的結(jié)果,但是異步,即返回的Promise
function sum(a, b){
    return new Promise(resolve => {
        setTimeout(() => {
            resolve(a + b)
        }, 2000)
    })

}

// 通過async創(chuàng)建一個(gè)異步函數(shù)
async function fn3() {
    sum(123, 456).then(r => {
        console.log(r)
    })

}

// 調(diào)用fn3()
fn3()
  • 當(dāng)我們通過await去調(diào)用異步函數(shù)時(shí)候,它會(huì)暫停代碼的運(yùn)行
  • 直到異步代碼執(zhí)行有結(jié)果時(shí),才會(huì)將結(jié)果返回
  • 注意 await只能用于 async聲明的異步函數(shù)中,或者es模塊的緊急作用域中
  • await阻塞的只是異步函數(shù)內(nèi)部的代碼,不會(huì)影響外部代碼
  • 通過 await 調(diào)用異步代碼時(shí),需要通過try-catch來處理異常
/*
    在async聲明的異步函數(shù)中可以使用await關(guān)鍵字來調(diào)用異步函數(shù)
*/


// 創(chuàng)建一個(gè)函數(shù)計(jì)算 a + b的結(jié)果,但是異步,即返回的Promise
function sum1(a, b){
    return new Promise(resolve => {
        setTimeout(() => {
            resolve(a + b)
        }, 2000)
    })

}

/*
    Promise解決了異步調(diào)用中回調(diào)函數(shù)問題
        雖然通過鏈?zhǔn)秸{(diào)用解決了回調(diào)地獄,但是鏈?zhǔn)秸{(diào)用太多以后還是不好看
        但現(xiàn)在要求以同步的方式去調(diào)用異步的代碼
*/
async function fn4() {
    // 鏈?zhǔn)秸{(diào)用
    // sum1(123, 456)
    //     .then(r => sum(r, 8))
    //     .then(r => sum(r, 8))
    //     .then(r => console.log(r))

    // 當(dāng)我們通過await去調(diào)用異步函數(shù)時(shí)候,它會(huì)暫停代碼的運(yùn)行
    // 直到異步代碼執(zhí)行有結(jié)果時(shí),才會(huì)將結(jié)果返回
    // 注意 await只能用于 async聲明的異步函數(shù)中,或者es模塊的緊急作用域中
    // await阻塞的只是異步函數(shù)內(nèi)部的代碼,不會(huì)影響外部代碼
    // 通過 await 調(diào)用異步代碼時(shí),需要通過try-catch來處理異常
    
   
    try{

        let result = await sum(123, 456)
        result = await sum(result, 8)
        result = await sum(result, 9)

        console.log(result)
    }catch(e){
        console.log("出錯(cuò)了")
    }
    

    // awwit阻塞的是異步函數(shù)內(nèi)部的代碼
    // console.log(123)
    // console.log(222)
    // console.log(333)

}

// 調(diào)用fn3()
fn4()

// await不會(huì)阻塞外部代碼
console.log("外部代碼")

如果async聲明的函數(shù)沒有寫await,那么它就會(huì)依次執(zhí)行

// 如果async聲明的函數(shù)中沒有寫await,那么它里面就會(huì)依次執(zhí)行
async function fn4(){
    console.log(1)
    console.log(2)
    console.log(3)
    console.log(4)
    // 如果有return 
    return 10
}

fn4()


// fn4等價(jià)于fn5
function fn5() {
    return new Promise(resolve => {
        console.log(1)
        console.log(2)
        console.log(3)
        console.log(4)
        resolve(10) // return放在resolve中 fn4如果沒有返回值,resolve就為空
    })
}

fn5()

console.log(5)  // 執(zhí)行結(jié)果 1 2 3 4 5 1 2 3 4 5 6

使用await調(diào)用函數(shù)后,await當(dāng)前函數(shù)后的所有代碼,會(huì)先進(jìn)入微任務(wù)隊(duì)列

await后的所有代碼,都會(huì)放入到微任務(wù)隊(duì)列中執(zhí)行文章來源地址http://www.zghlxwxcb.cn/news/detail-432310.html

// 同步代碼前加await
async function fn6(){
    console.log(111)
    /*
        當(dāng)我們使用await調(diào)用函數(shù)后,await當(dāng)前函數(shù)后的所有代碼
            會(huì)在await當(dāng)前函數(shù)執(zhí)行完畢后,被列入微任務(wù)隊(duì)列中
    */
    await console.log(112)
    // await后的所有代碼,都會(huì)放入到微任務(wù)隊(duì)列中執(zhí)行
    console.log(113)
    
}

fn6()

console.log(222)  // 執(zhí)行結(jié)果為 111 112 222 113

// 等價(jià)于

function fn7() {
    return new Promise(resolve => {
        console.log(111)
        // 上面的在此處加了await
        console.log(112)
        
        resolve()
    }).then(r => {
        console.log(113)
    })
}

到了這里,關(guān)于async和await的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Nodejs】Node.js開發(fā)環(huán)境安裝

    【Nodejs】Node.js開發(fā)環(huán)境安裝

    在命令窗口中輸入 node -v 可以查看版本 0.x 完全不技術(shù) ES6 4.x 部分支持 ES6 特性 5.x 部分支持ES6特性(比4.x多些),屬于過渡產(chǎn)品,現(xiàn)在來說應(yīng)該沒有什么理由去用這個(gè)了 6.x 支持98%的 ES6 特性 8.x 支持 ES6 特性 去 Node.js 的官網(wǎng)下載安裝包: 我們也可以下載歷史版本。 后續(xù)如果

    2024年02月15日
    瀏覽(36)
  • async和await

    Node.JS官方文檔:https://nodejs.dev/en/ 創(chuàng)建異步函數(shù),并返回相關(guān)數(shù)值: 一般方式創(chuàng)建 通過async方式創(chuàng)建: 在async聲明的函數(shù)中可以使用await來調(diào)用異步函數(shù) 當(dāng)我們通過await去調(diào)用異步函數(shù)時(shí)候,它會(huì)暫停代碼的運(yùn)行 直到異步代碼執(zhí)行有結(jié)果時(shí),才會(huì)將結(jié)果返回 注意 awa

    2024年02月02日
    瀏覽(21)
  • async/await 編程理解

    async/await 編程理解

    博客參考 Asynchronous Programming in Rust ,并結(jié)合其中的例子闡述 async 和 await 的用法,如何使用 async 和 await 是本節(jié)的重點(diǎn)。 async 和 await 主要用來寫異步代碼,async 聲明的代碼塊實(shí)現(xiàn)了 Future 特性。如果實(shí)現(xiàn) Future 的代碼發(fā)生阻塞,會(huì)讓出當(dāng)前線程的控制權(quán),允許線程去執(zhí)行別的

    2024年02月12日
    瀏覽(24)
  • async/await 的用法

    使用場(chǎng)景 在實(shí)際開發(fā)中,如果你遇到了等第一個(gè)請(qǐng)求返回?cái)?shù)據(jù)完,再執(zhí)行第二個(gè)請(qǐng)求(可能第二個(gè)請(qǐng)求要傳的參數(shù)就是第一個(gè)請(qǐng)求接口返回的數(shù)據(jù))這個(gè)問題。 代碼 方法1: 方法2: 先請(qǐng)求接口1,獲取到接口1返回結(jié)果后,將其作為接口2的參數(shù),再去請(qǐng)求接口2 1、async 用于申明

    2024年02月07日
    瀏覽(29)
  • Node.Js篇 NodeJs使用MongoDB

    Node.Js篇 NodeJs使用MongoDB

    目錄 介紹 概念解析 ??????????????????安裝 啟動(dòng)時(shí)注意事項(xiàng) NodeJs操作Mongo 介紹 MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫。由 C++ 語言編寫。旨在為 WEB 應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

    2024年02月09日
    瀏覽(31)
  • Promise、Async/Await 詳解

    ? ? ? ? Promise是抽象異步處理對(duì)象以及對(duì)其進(jìn)行各種操作的組件。Promise本身是同步的立即執(zhí)行函數(shù)解決異步回調(diào)的問題, 當(dāng)調(diào)用 resolve 或 reject 回調(diào)函數(shù)進(jìn)行處理的時(shí)候, 是異步操作, 會(huì)先執(zhí)行.then/catch等,當(dāng)主棧完成后,才會(huì)去調(diào)用執(zhí)行resolve/reject中存放的方法。 ? ? ?

    2024年02月14日
    瀏覽(33)
  • Async In C#5.0(async/await)學(xué)習(xí)筆記

    Async In C#5.0(async/await)學(xué)習(xí)筆記

    此文為Async in C#5.0學(xué)習(xí)筆記 方式一:基于事件的異步Event-based Asynchronous Pattern (EAP). 方式二:基于IAsyncResult接口的異步 方式三:回調(diào) 方式四:使用Task,尤其是TaskT 共同的缺陷:必須將方法分為兩部分 亂如麻的遞歸 async/await 注意,下面這樣操作可能會(huì)有隱患,當(dāng)firstTask有異常時(shí)

    2024年01月22日
    瀏覽(24)
  • kotlin協(xié)程async與await

    kotlin協(xié)程async與await 輸出: 3 3072 https://zhangphil.blog.csdn.net/article/details/129265638 https://zhangphil.blog.csdn.net/article/details/129265638 kotlin協(xié)程、線程切換,函數(shù)方法委托_zhangphil的博客-CSDN博客 runBlocking 內(nèi)部啟動(dòng)的3個(gè)協(xié)程做耗時(shí)操作,從輸出可以看到3個(gè)協(xié)程交叉并發(fā)執(zhí)行,runBlocking 會(huì)等

    2024年02月05日
    瀏覽(57)
  • 【C#】async和await 續(xù)

    【C#】async和await 續(xù)

    在文章《async和await》中,我們觀察到了一下客觀的規(guī)律,但是沒有講到本質(zhì),而且還遺留了一個(gè)問題: 這篇文章中,我們繼續(xù)看看這個(gè)問題如何解決! 我們?cè)倏纯粗皩懙拇a: 當(dāng)時(shí)問題是,為啥 Task.Factory.StartNew 可以看到異步效果,而Task.Run中卻是同步效果。 那其實(shí)是因?yàn)?/p>

    2024年02月15日
    瀏覽(23)
  • async/await 的理解和用法

    async放在函數(shù)前的一個(gè)修飾符,函數(shù)會(huì)默認(rèn)返回一個(gè)Promise對(duì)象的resolve的值 1、await也是一個(gè)修飾符, 只能放在async定義的函數(shù)內(nèi) ,可以理解為 等待 2、await 修飾的是Promise對(duì)象: 獲取Promise中返回的內(nèi)容 (resolve或reject的參數(shù)), 且取到值后語句才會(huì)往下執(zhí)行; 3、如果不是P

    2024年02月01日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包