站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

await是es6還是es7的

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

await是es6還是es7的

前端(vue)入門到精通課程:進(jìn)入學(xué)習(xí)
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調(diào)試工具:點(diǎn)擊使用

本教程操作環(huán)境:windows7系統(tǒng)、ECMAScript 7版、Dell G3電腦。

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

一、什么是async和await

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

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

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

async和await它們兩有一個(gè)嚴(yán)格規(guī)定,兩者都離不開對方,但是,await只能寫在async函數(shù)中。

二、用法

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

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

await是es6還是es7的
從結(jié)果看來async函數(shù)返回的是promise對象,它會(huì)直接將返回值封裝成一個(gè)promise對象。

如果沒有返回值

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

await是es6還是es7的

從結(jié)果看來async函數(shù)返回的是promise對象,當(dāng)時(shí)值是undefined。因此。在沒有await的情況下,返回一個(gè) promise 對象,并不會(huì)阻塞后面的語句。

但是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);
登錄后復(fù)制

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

一般用await去等待async函數(shù)完成,await 等待的是一個(gè)表達(dá)式,表達(dá)式的計(jì)算結(jié)果是 promise 對象或其它值,因此,await后面實(shí)際可以接收普通函數(shù)調(diào)用或直接量。
如果await等到的不是promise對象,表達(dá)式運(yùn)算結(jié)果就是它等到的東西。
如果是promise對象,await會(huì)阻塞后面的代碼,等promise對象處理成功,得到的值為await表達(dá)式的運(yùn)算結(jié)果。雖然await阻塞了,但await在async中,async不會(huì)阻塞,它內(nèi)部所有的阻塞都被封裝在一個(gè)promise對象中異步執(zhí)行。

任何一個(gè)await語句后面的 Promise 對象變?yōu)閞eject狀態(tài),那么整個(gè)async函數(shù)都會(huì)中斷執(zhí)行。

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

await是es6還是es7的
從結(jié)果看來,第二個(gè)await語句是不會(huì)執(zhí)行的,因?yàn)榈谝粋€(gè)await語句狀態(tài)變成了reject。

三、Async函數(shù)的錯(cuò)誤處理

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

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

從結(jié)果看來,當(dāng)async函數(shù)中的await只要有一個(gè)出現(xiàn)reject狀態(tài),則后面的await都不會(huì)執(zhí)行。一般解決辦法用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
登錄后復(fù)制

從結(jié)果看來,這樣就很好的解決了這個(gè)問題,當(dāng)有多個(gè)await不會(huì)執(zhí)行時(shí),可以都放在try…catch中。

四、結(jié)論

async|await的優(yōu)點(diǎn):

  • async|await解決了回調(diào)地獄的問題
  • async|await支持并發(fā)執(zhí)行
  • async|await對異步處理更加簡潔
  • async|await可以在try…catch中捕獲錯(cuò)誤

【推薦學(xué)習(xí):javascript高級教程】

贊(0)
分享到: 更多 (0)
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
日韩在线一区二区三区免费视频 | 久久精品女人毛片国产| 日韩精品电影在线| 国产成人精品综合| 嫩草影院精品视频在线观看| 香蕉在线精品视频在线观看6| 亚洲AV无码日韩AV无码导航| 国产精品久久波多野结衣| 亚洲av无码国产精品色午夜字幕 | 极品精品国产超清自在线观看| 精品久久人人做人人爽综合| 亚洲国产av无码精品| 日韩伦理一区二区| 国产自啪精品视频网站丝袜 | 国产精品成人无码久久久| 国产精品福利电影| 国产精品臀控福利在线观看 | 人妻少妇精品视频三区二区一区| 国产韩国精品一区二区三区久久| 91精品国产自产在线观看永久∴| 99国产精品免费观看视频| 无码精品久久久久久人妻中字| 亚洲国产精品一区第二页| 麻豆精品成人免费国产片| 精品亚洲综合在线第一区| 黑人精品videos亚洲人| 亚洲国产精品无码av| 久久精品影院永久网址| 久久国产精品萌白酱免费| 久久精品美女视频| 久久一本精品久久精品66| 无码精品国产VA在线观看 | 免费国产精品视频| 日韩精品中文字幕第2页| 国产成人亚洲精品蜜芽影院| 国产成人高清精品免费鸭子| 国产成人精品实拍在线| 日韩精品一二三四区| 中日韩国语视频在线观看| 日韩AV无码中文无码不卡电影| 亚洲AV日韩AV无码污污网站 |