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

資訊專欄INFORMATION COLUMN

對(duì)async/await的理解

YFan / 3155人閱讀

摘要:異步函數(shù)是指通過事件循環(huán)異步執(zhí)行的函數(shù),它會(huì)通過一個(gè)隱式的返回其結(jié)果。如果函數(shù)中是一個(gè)值,這個(gè)值就是對(duì)象中的值如果函數(shù)中是一個(gè)值,這個(gè)值就是對(duì)象中的值??偨Y(jié)是在之后產(chǎn)生的,它和誕生的目的都是為了解決回調(diào)地獄,至于什么是回調(diào)地獄改進(jìn)后改進(jìn)后

async 函數(shù)

先看看MDN上怎么介紹的:

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

如果async函數(shù)中是return一個(gè)值,這個(gè)值就是Promise對(duì)象中resolve的值;

如果async函數(shù)中是throw一個(gè)值,這個(gè)值就是Promise對(duì)象中reject的值。

async函數(shù)的寫法
async function imAsync(num) {
  if (num > 0) {
    return num // 這里相當(dāng)于resolve(num)
  } else {
    throw num // 這里相當(dāng)于reject(num)
  }
}

imAsync(1).then(function (v) {
  console.log(v); // 1
});

// 注意這里是catch
imAsync(0).catch(function (v) {
  console.log(v); // 0
})
Promise的寫法
function imPromise(num) {

  return new Promise(function (resolve, reject) {
    if (num > 0) {
      resolve(num);
    } else {
      reject(num);
    }
  })
}

imPromise(1).then(function (v) {
  console.log(v); // 1
})

imPromise(0).then(function (v) {
  console.log(v); // 0
})
await
await會(huì)暫停當(dāng)前async函數(shù)的執(zhí)行,等待后面的Promise的計(jì)算結(jié)果返回以后再繼續(xù)執(zhí)行當(dāng)前的async函數(shù)。

如果單純的 await setTimeout(...)是行不通的,await 不是什么都等,它等待的只是Promise,你如果沒有給他返回個(gè)Promise,那它還是會(huì)繼續(xù)向下執(zhí)行。
所以 await 等待的不是所有的異步操作,等待的只是Promise。

總結(jié)

async/await是在Promise之后產(chǎn)生的,它和Promise誕生的目的都是為了解決“回調(diào)地獄”,至于什么是回調(diào)地獄:


Promise改進(jìn)后:


async/await改進(jìn)后:

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

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

相關(guān)文章

  • 令人費(fèi)解 async/await 執(zhí)行順序

    摘要:?jiǎn)栴}的關(guān)鍵在于其執(zhí)行過程中的微任務(wù)數(shù)量,下文中我們需要用上述代碼中的方式對(duì)微任務(wù)的執(zhí)行順序進(jìn)行標(biāo)記,以輔助我們理解這其中的執(zhí)行過程。 原文發(fā)布在掘金社區(qū):https://juejin.im/post/5c3cc981f265da616a47e028 起源 2019年了,相信大家對(duì) Promise 和 async/await 都不再陌生了。 前幾日,我在社區(qū)讀到了一篇關(guān)于 async/...

    WilsonLiu95 評(píng)論0 收藏0
  • async await 報(bào)錯(cuò)Unexpected identifier 談?wù)?em>對(duì)上下文理解

    摘要:解決辦法,將箭頭函數(shù)聲明為函數(shù),代碼如下運(yùn)行結(jié)果至此,問題解決。必須在函數(shù)的上下文中。對(duì)程序而言有了上下文調(diào)用幀才有一個(gè)完整的邏輯過程。 先簡(jiǎn)單介紹下async await:   async/await是ES6推出的異步處理方案,目的也很明確:更好的實(shí)現(xiàn)異步編程。 詳細(xì)見阮大神 ES6入門 現(xiàn)在說說實(shí)踐中遇到的問題:使用await報(bào)錯(cuò)Unexpected identifier 先...

    Bryan 評(píng)論0 收藏0
  • 理解 JavaScript async/await

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

    tracymac7 評(píng)論0 收藏0
  • [譯]帶你理解 Async/await

    摘要:所以是在一秒后顯示的。這個(gè)行為不會(huì)耗費(fèi)資源,因?yàn)橐婵梢酝瑫r(shí)處理其他任務(wù)執(zhí)行其他腳本,處理事件等。每個(gè)回調(diào)首先被放入微任務(wù)隊(duì)列然后在當(dāng)前代碼執(zhí)行完成后被執(zhí)行。,函數(shù)是異步的,但是會(huì)立即運(yùn)行。否則,就返回結(jié)果,并賦值。 「async/await」是 promises 的另一種更便捷更流行的寫法,同時(shí)它也更易于理解和使用。 Async functions 讓我們以 async 這個(gè)關(guān)鍵字開...

    xiaochao 評(píng)論0 收藏0
  • 8張圖幫你一步步看清 async/await 和 promise 執(zhí)行順序

    摘要:第部分畫圖一步步看清宏任務(wù)微任務(wù)的執(zhí)行過程我們以開篇的經(jīng)典面試題為例,分析這個(gè)例子中的宏任務(wù)和微任務(wù)。注意這里只是把推入微任務(wù)隊(duì)列,并沒有執(zhí)行。執(zhí)行結(jié)束,才能繼續(xù)執(zhí)行后面的代碼如圖此時(shí)當(dāng)前宏任務(wù)都執(zhí)行完了,要處理微任務(wù)隊(duì)列里的代碼。 8張圖讓你一步步看清 async/await 和 promise 的執(zhí)行順序 為什么寫這篇文章? 測(cè)試一下自己有沒有必要看 需要具備的前置基礎(chǔ)知識(shí) 主...

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

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

0條評(píng)論

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