溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Javascript中promise,async和await的區(qū)別是什么

發(fā)布時(shí)間:2022-03-24 09:13:19 來源:億速云 閱讀:201 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“Javascript中promise,async和await的區(qū)別是什么”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Javascript中promise,async和await的區(qū)別是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

終于把promise, async, await的區(qū)別和聯(lián)系弄清楚了,看下面代碼

寫法1,2是promise的寫法

寫法6是async和await的寫法

主要看第2種寫法和第6中寫法即可, 第2種寫法是promise的典型寫法,第6中寫法是async, await的典型寫法

// 以下三個(gè)請(qǐng)求依次執(zhí)行
req1 = () => { return fetch("http://example.com/api/v1/get")}
req2 = () => { return fetch("http://example.com/api/v1/post")}
req3 = () => { return fetch("http://example.com/api/v1/delete")}
//寫法1
req1().then(res=>{
    console.log("1: ",res)
    req2().then(res =>{
        console.log("2: ",res)
        req3().then(res =>{
            console.log("3: ",res)
        })
    })
})

// 寫法2
req1().then(res =>{
    console.log("1: ", res)
    return req2()
})
.then(res =>{
    console.log("2: ", res)
    return req3()
})
.then(res =>{
    console.log("3: ", res)
})
// 寫法3
function f1(){
    req1()
    req2()
    req3()
}
// 寫法4
async  function f2(){
    await req1
    await req2
    await req3
}
// 寫法5
async  function f3(){
    req1().then(res => {
        console.log("1:", res)
    })
    await f3_1()
}
async function f3_1(){
    req1().then(res => {
        console.log("2:", res)
    })
    await f3_2()
}
async function f3_2(){
    req2().then(res=>{
         console.log("3: ",res)
    })
}
// 寫法6
ff()
async function ff(){
    await req1_good()
}
async function req1_good(){
    fetch("http://example.com/api/v1/get").then(res =>{
        console.log("1: ",res)
    })
    await req2_good()
}
async  function req2_good() {
    fetch("http://example.com/api/v1/post").then(res =>{
        console.log("2: ",res)
    })
    await req3_good()
}
async function req3_good() {
     fetch("http://example.com/api/v1/delete").then(res => {
         console.log("3: ",res)
     })
}
  • 最外層的async函數(shù)調(diào)用之后立即返回了,但是async還是里面還是在逐層執(zhí)行

  • await的作用是等待其修飾的函數(shù)內(nèi)部的所有await函數(shù)都執(zhí)行完畢,

  • 從最外層啟動(dòng)一個(gè)async函數(shù)相當(dāng)于go一個(gè)協(xié)程,await func 也相當(dāng)于go 一個(gè)協(xié)程,不同在于await = go + waitgroup

  • await比promise高明的地方在于,promise在then里面調(diào)用另一個(gè)promise時(shí),不得不return另一個(gè)promise再then, 或者在then中回調(diào),但是await完全不需要

  • async是為了異步,await是為了異步+阻塞,缺一不可

讀到這里,這篇“Javascript中promise,async和await的區(qū)別是什么”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI