初探ES7中的 async await

2021-09-03 02:25:40 字數 1622 閱讀 1732

任意乙個名稱都是有意義的,先從字面意思來理解。async 是「非同步」的簡寫,而 await 可以認為是 async wait 的簡寫。所以應該很好理解 async 用於申明乙個 function 是非同步的,而 await 用於等待乙個非同步方法執行完成。

另外還有乙個很有意思的語法規定,await 只能出現在 async 函式中。然後細心的朋友會產生乙個疑問,如果 await 只能出現在 async 函式中,那這個 async 函式應該怎麼呼叫?

如果需要通過 await 來呼叫乙個 async 函式,那這個呼叫的外面必須得再包乙個 async 函式,然後……進入死迴圈,永無出頭之日……

如果 async 函式不需要 await 來呼叫,那 async 到底起個啥作用?

這個問題的關鍵在於,async 函式是怎麼處理它的返回值的!

我們當然希望它能直接通過return語句返回我們想要的值,但是如果真是這樣,似乎就沒 await 什麼事了。所以,寫段**來試試,看它到底會返回什麼:

async function testasync() 

const result = testasync();

console.log(result);

看到輸出就恍然大悟了——輸出的是乙個 promise 物件。

一般來說,都認為 await 是在等待乙個 async 函式完成。不過按語法說明,await 等待的是乙個表示式,這個表示式的計算結果是 promise 物件或者其它值(換句話說,就是沒有特殊限定)。

因為 async 函式返回乙個 promise 物件,所以 await 可以用於等待乙個 async 函式的返回值——這也可以說是 await 在等 async 函式,但要清楚,它等的實際是乙個返回值。注意到 await 不僅僅用於等 promise 物件,它可以等任意表示式的結果,所以,await 後面實際是可以接普通函式呼叫或者直接量的。所以下面這個示例完全可以正確執行。

**:

function fn01 () ).catch(function (error) );

});};

function fn02 () ).catch(function (error) );

});};

// 公共設定部分

function fn03 () ).catch(function (error) );

});};

async function action () ;

action().then(val => );

結果:

如果專案過程中要控制非同步執行的順序,其實通過promise.all放法也可以達到類似的效果,如下

ES7 學習筆記

es7只有2個特性 他是乙個替代indexof 開發人員用來檢查某個字在陣列中是否存在的。indexof 驗證陣列中是否存在某個元素,這時需要根據返回值是否為 1來判斷。includes 驗證陣列中是否存在某個元素,這樣更加直觀簡單,直接返回 true 或 false。let arr react a...

ES7特性總結

不知道小夥伴們es6的特性學的怎麼樣了?es2016 es7 和es2017 es8 都已經要出來了,本文為大家整理介紹一下es7的新特性。es7特性只有兩個 array.prototype.includes value 任意值 boolean includes 方法用來判斷乙個陣列是否包含乙個指定...

es7查詢總結

put nba create 1 put nba doc 2 put nba doc 3 put nba doc 4 put nba doc 5 put nba doc 6 put nba doc 7 查詢英文名稱為 golden state warriors 的球隊資訊 get nba searc...