站長資訊網
最全最豐富的資訊網站

await是es6還是es7的

await是es7。async和await是ES7中新增內容,是對于異步操作的解決方案。async顧名思義是“異步”的意思,async用于聲明一個函數是異步的;而await從字面意思上是“等待”的意思,就是用于等待異步完成。async和await有一個嚴格規定,兩者都離不開對方,且await只能寫在async函數中。

await是es6還是es7的

前端(vue)入門到精通課程:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調試工具:點擊使用

本教程操作環境:windows7系統、ECMAScript 7版、Dell G3電腦。

在最新的ES7(ES2017)中提出的前端異步特性:async、await。

一、什么是async和await

async和await是ES7中新增內容,對于異步操作的解決方案,它是Generator函數的語法糖。

  • async|await是編寫異步的新方法,之前ES6中用的是promise。
  • async|await是建立在promise基礎之上的新寫法。
  • async|await也是非阻塞的。

async顧名思義是“異步”的意思,async用于聲明一個函數是異步的。而await從字面意思上是“等待”的意思,就是用于等待異步完成。

async和await它們兩有一個嚴格規定,兩者都離不開對方,但是,await只能寫在async函數中。

二、用法

async如何處理返回值
async的返回值是一個promise對象,也就是說它會直接通過promise中的方法將返回值封裝成一個promise對象。

async function Async() { return "hello world"; } const result = Async(); console.log(result);
登錄后復制

await是es6還是es7的
從結果看來async函數返回的是promise對象,它會直接將返回值封裝成一個promise對象。

如果沒有返回值

async function Async() {     console.log("hello world"); } let result1 = Async(); console.log(result1);
登錄后復制

await是es6還是es7的

從結果看來async函數返回的是promise對象,當時值是undefined。因此。在沒有await的情況下,返回一個 promise 對象,并不會阻塞后面的語句。

但是await是在等待什么呢

function time(s) {   return new Promise((resolve) => {     setTimeout(resolve, ms);   }); } async function Async(value, s) {   await time(s);   console.log(value); } Async('hello world', 50);
登錄后復制

指定 50 毫秒以后,輸出hello world。

一般用await去等待async函數完成,await 等待的是一個表達式,表達式的計算結果是 promise 對象或其它值,因此,await后面實際可以接收普通函數調用或直接量。
如果await等到的不是promise對象,表達式運算結果就是它等到的東西。
如果是promise對象,await會阻塞后面的代碼,等promise對象處理成功,得到的值為await表達式的運算結果。雖然await阻塞了,但await在async中,async不會阻塞,它內部所有的阻塞都被封裝在一個promise對象中異步執行。

任何一個await語句后面的 Promise 對象變為reject狀態,那么整個async函數都會中斷執行。

async function Async() {   await Promise.reject('出錯了');   await Promise.resolve('hello world'); // 不會執行 } let result1 = Async(); console.log(result1);
登錄后復制

await是es6還是es7的
從結果看來,第二個await語句是不會執行的,因為第一個await語句狀態變成了reject。

三、Async函數的錯誤處理

如果await后面的異步操作出錯,那么async函數返回的 promise 對象被reject了。

let a; async function f() {     await Promise.reject('error');     a = await 1; // await 沒有執行 } f().then(v => console.log(a));
登錄后復制

從結果看來,當async函數中的await只要有一個出現reject狀態,則后面的await都不會執行。一般解決辦法用try…catch。

// 正確的寫法 let a; async function f() {     try {         await Promise.reject('error')     } catch (error) {         console.log(error);     }     a = await 1;     return a; }  f().then(v => console.log(a)); // 1
登錄后復制

從結果看來,這樣就很好的解決了這個問題,當有多個await不會執行時,可以都放在try…catch中。

四、結論

async|await的優點:

  • async|await解決了回調地獄的問題
  • async|await支持并發執行
  • async|await對異步處理更加簡潔
  • async|await可以在try…catch中捕獲錯誤

【推薦學習:javascript高級教程】

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久久91精品国产一区二区三区 | 亚洲综合精品香蕉久久网97| 国产精品女同一区二区| 激情啪啪精品一区二区| 国产成人久久精品亚洲小说| 大香视频伊人精品75| 亚洲中文精品久久久久久不卡| 精品女同一区二区三区免费站| 99国产精品99久久久久久| 久久精品日日躁精品| 九九热这里只有在线精品视| 99精品久久久久中文字幕| 久久精品这里只有精99品| 国产精品色午夜免费视频| 亚洲av无码成人精品区一本二本 | 久久免费视频精品| 九九热在线精品视频| 色噜噜亚洲精品中文字幕| 日韩一区二区三区在线精品| 国产精品模特hd在线| 国产精品自产拍在线网站| 麻豆成人精品国产免费| 精品一区狼人国产在线| 精品熟女碰碰人人a久久| 国内精品视频一区二区三区| 国产精品美女一区二区三区 | 日韩在线免费电影| 亚洲日韩AV一区二区三区中文 | 国产精品视频一区二区三区不卡| 日韩一区二区三区不卡视频| 男人的天堂精品国产一区| 九九在线精品视频| 国产精品成人国产乱一区| 国产精品自在线拍国产第一页| 精品久久人人妻人人做精品 | 久久99国产综合精品免费| 精品无码人妻一区二区三区品 | 国产精品国产精品偷麻豆| 国产AV一区二区精品凹凸| 日韩人妻精品一区二区三区视频 | 亚洲日韩小电影在线观看|