91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Node.js的async和await進行異步編程

發布時間:2023-05-05 09:27:13 來源:億速云 閱讀:83 作者:iii 欄目:開發技術

這篇“怎么使用Node.js的async和await進行異步編程”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“怎么使用Node.js的async和await進行異步編程”文章吧。

創建異步函數,并返回相關數值:

一般方式創建

/*
    函數直接通過返回Promise成為異步函數
    異步函數:返回promise的函數稱之為異步函數
*/ 
function fn(){
    return Promise.resolve(10)
}
// 讀取結果需要通過then去讀取
fn().then(r => {
    console.log(r)
})

通過async方式創建:

/*
    通過async可以快速的創建異步函數
*/
/*
    通過async可以來創建一個異步函數,fn2() 此時就是一個異步函數
        異步函數的返回值回自動封裝到一個Promise中返回
*/
async function fn2(){
    return "async返回的數據10"
}
// 讀取結果需要通過then去讀取
fn2().then(r => {
    console.log(r)
})

在async聲明的函數中可以使用await關鍵字來調用異步函數

 /*
    在async聲明的異步函數中可以使用await關鍵字來調用異步函數
*/
// 創建一個函數計算 a + b的結果,但是異步,即返回的Promise
function sum(a, b){
    return new Promise(resolve => {
        setTimeout(() => {
            resolve(a + b)
        }, 2000)
    })
}
// 通過async創建一個異步函數
async function fn3() {
    sum(123, 456).then(r => {
        console.log(r)
    })
}
// 調用fn3()
fn3()
  • 當我們通過await去調用異步函數時候,它會暫停代碼的運行

  • 直到異步代碼執行有結果時,才會將結果返回

  • 注意 await只能用于 async聲明的異步函數中,或者es模塊的緊急作用域中

  • await阻塞的只是異步函數內部的代碼,不會影響外部代碼

  • 通過 await 調用異步代碼時,需要通過try-catch來處理異常

/*
    在async聲明的異步函數中可以使用await關鍵字來調用異步函數
*/
// 創建一個函數計算 a + b的結果,但是異步,即返回的Promise
function sum1(a, b){
    return new Promise(resolve => {
        setTimeout(() => {
            resolve(a + b)
        }, 2000)
    })
}
/*
    Promise解決了異步調用中回調函數問題
        雖然通過鏈式調用解決了回調地獄,但是鏈式調用太多以后還是不好看
        但現在要求以同步的方式去調用異步的代碼
*/
async function fn4() {
    // 鏈式調用
    // sum1(123, 456)
    //     .then(r => sum(r, 8))
    //     .then(r => sum(r, 8))
    //     .then(r => console.log(r))
    // 當我們通過await去調用異步函數時候,它會暫停代碼的運行
    // 直到異步代碼執行有結果時,才會將結果返回
    // 注意 await只能用于 async聲明的異步函數中,或者es模塊的緊急作用域中
    // await阻塞的只是異步函數內部的代碼,不會影響外部代碼
    // 通過 await 調用異步代碼時,需要通過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("出錯了")
    }
    // awwit阻塞的是異步函數內部的代碼
    // console.log(123)
    // console.log(222)
    // console.log(333)
}
// 調用fn3()
fn4()
// await不會阻塞外部代碼
console.log("外部代碼")

如果async聲明的函數沒有寫await,那么它就會依次執行

// 如果async聲明的函數中沒有寫await,那么它里面就會依次執行
async function fn4(){
    console.log(1)
    console.log(2)
    console.log(3)
    console.log(4)
    // 如果有return 
    return 10
}
fn4()
// fn4等價于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)  // 執行結果 1 2 3 4 5 1 2 3 4 5 6

使用await調用函數后,await當前函數后的所有代碼,會先進入微任務隊列

await后的所有代碼,都會放入到微任務隊列中執行

// 同步代碼前加await
async function fn6(){
    console.log(111)
    /*
        當我們使用await調用函數后,await當前函數后的所有代碼
            會在await當前函數執行完畢后,被列入微任務隊列中
    */
    await console.log(112)
    // await后的所有代碼,都會放入到微任務隊列中執行
    console.log(113)
}
fn6()
console.log(222)  // 執行結果為 111 112 222 113
// 等價于
function fn7() {
    return new Promise(resolve => {
        console.log(111)
        // 上面的在此處加了await
        console.log(112)
        resolve()
    }).then(r => {
        console.log(113)
    })
}

以上就是關于“怎么使用Node.js的async和await進行異步編程”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金昌市| 通道| 同仁县| 荆州市| 海南省| 长葛市| 宜黄县| 徐州市| 九台市| 凯里市| 安平县| 巴马| 闵行区| 曲松县| 赣州市| 通辽市| 昌邑市| 拜城县| 闻喜县| 北京市| 昌图县| 博爱县| 广宁县| 万盛区| 防城港市| 河津市| 司法| 祥云县| 兴业县| 射阳县| 灵寿县| 留坝县| 九江县| 尚志市| 曲水县| 临邑县| 高清| 宁津县| 岫岩| 文安县| 延长县|