摘要:異步函數(shù)是指通過事件循環(huán)異步執(zhí)行的函數(shù),它會通過一個隱式的返回其結(jié)果。如果函數(shù)中是一個值,這個值就是對象中的值如果函數(shù)中是一個值,這個值就是對象中的值。總結(jié)是在之后產(chǎn)生的,它和誕生的目的都是為了解決回調(diào)地獄,至于什么是回調(diào)地獄改進后改進后
async 函數(shù)
先看看MDN上怎么介紹的:
async function 聲明用于定義一個返回 AsyncFunction 對象的異步函數(shù)。異步函數(shù)是指通過事件循環(huán)異步執(zhí)行的函數(shù),它會通過一個隱式的 Promise 返回其結(jié)果。但是如果你的代碼使用了異步函數(shù),它的語法和結(jié)構(gòu)會更像是標準的同步函數(shù)。
如果async函數(shù)中是return一個值,這個值就是Promise對象中resolve的值;
如果async函數(shù)中是throw一個值,這個值就是Promise對象中reject的值。
async函數(shù)的寫法async function imAsync(num) { if (num > 0) { return num // 這里相當于resolve(num) } else { throw num // 這里相當于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會暫停當前async函數(shù)的執(zhí)行,等待后面的Promise的計算結(jié)果返回以后再繼續(xù)執(zhí)行當前的async函數(shù)。
如果單純的 await setTimeout(...)是行不通的,await 不是什么都等,它等待的只是Promise,你如果沒有給他返回個Promise,那它還是會繼續(xù)向下執(zhí)行。
所以 await 等待的不是所有的異步操作,等待的只是Promise。
async/await是在Promise之后產(chǎn)生的,它和Promise誕生的目的都是為了解決“回調(diào)地獄”,至于什么是回調(diào)地獄:
Promise改進后:
async/await改進后:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/103930.html
摘要:問題的關(guān)鍵在于其執(zhí)行過程中的微任務數(shù)量,下文中我們需要用上述代碼中的方式對微任務的執(zhí)行順序進行標記,以輔助我們理解這其中的執(zhí)行過程。 原文發(fā)布在掘金社區(qū):https://juejin.im/post/5c3cc981f265da616a47e028 起源 2019年了,相信大家對 Promise 和 async/await 都不再陌生了。 前幾日,我在社區(qū)讀到了一篇關(guān)于 async/...
摘要:解決辦法,將箭頭函數(shù)聲明為函數(shù),代碼如下運行結(jié)果至此,問題解決。必須在函數(shù)的上下文中。對程序而言有了上下文調(diào)用幀才有一個完整的邏輯過程。 先簡單介紹下async await: async/await是ES6推出的異步處理方案,目的也很明確:更好的實現(xiàn)異步編程。 詳細見阮大神 ES6入門 現(xiàn)在說說實踐中遇到的問題:使用await報錯Unexpected identifier 先...
摘要:因為函數(shù)返回一個對象,所以可以用于等待一個函數(shù)的返回值這也可以說是在等函數(shù),但要清楚,它等的實際是一個返回值。幫我們干了啥作個簡單的比較上面已經(jīng)說明了會將其后的函數(shù)函數(shù)表達式或的返回值封裝成一個對象,而會等待這個完成,并將其的結(jié)果返回出來。 隨著 Node 7 的發(fā)布,越來越多的人開始研究據(jù)說是異步編程終級解決方案的 async/await。我第一次看到這組關(guān)鍵字并不是在 JavaSc...
摘要:所以是在一秒后顯示的。這個行為不會耗費資源,因為引擎可以同時處理其他任務執(zhí)行其他腳本,處理事件等。每個回調(diào)首先被放入微任務隊列然后在當前代碼執(zhí)行完成后被執(zhí)行。,函數(shù)是異步的,但是會立即運行。否則,就返回結(jié)果,并賦值。 「async/await」是 promises 的另一種更便捷更流行的寫法,同時它也更易于理解和使用。 Async functions 讓我們以 async 這個關(guān)鍵字開...
摘要:第部分畫圖一步步看清宏任務微任務的執(zhí)行過程我們以開篇的經(jīng)典面試題為例,分析這個例子中的宏任務和微任務。注意這里只是把推入微任務隊列,并沒有執(zhí)行。執(zhí)行結(jié)束,才能繼續(xù)執(zhí)行后面的代碼如圖此時當前宏任務都執(zhí)行完了,要處理微任務隊列里的代碼。 8張圖讓你一步步看清 async/await 和 promise 的執(zhí)行順序 為什么寫這篇文章? 測試一下自己有沒有必要看 需要具備的前置基礎(chǔ)知識 主...
閱讀 2403·2021-09-28 09:45
閱讀 3650·2021-09-24 09:48
閱讀 2323·2021-09-22 15:49
閱讀 3176·2021-09-08 16:10
閱讀 1657·2019-08-30 15:54
閱讀 2394·2019-08-30 15:53
閱讀 3076·2019-08-29 18:42
閱讀 2922·2019-08-29 16:19