摘要:什么是標(biāo)準(zhǔn)引入了函數(shù),使得異步操作變得更加方便。顧名思義是異步的意思,用于聲明一個(gè)函數(shù)是異步的。的作用正常情況下,命令后面是一個(gè)對(duì)象。表示函數(shù)等待返回結(jié)果了,再繼續(xù)執(zhí)行。上面便是一種錯(cuò)誤用法,并沒有在函數(shù)執(zhí)行上下文中,而是在的回調(diào)函數(shù)中。
什么是Async、await
ES2017 標(biāo)準(zhǔn)引入了 async 函數(shù),使得異步操作變得更加方便。async顧名思義是“異步”的意思,用于聲明一個(gè)函數(shù)是異步的。而await從字面意思上是“等待”的意思,就是用于等待異步完成。
基本用法 async函數(shù)的返回值既然async函數(shù)是聲明一個(gè)異步函數(shù),那么我們?nèi)绾沃肋@個(gè)函數(shù)是否執(zhí)行完成呢。我們觀察一下async函數(shù)的返回值就明白了。
async function lxcAsync() { return "LXC"; } console.log(lxcAsync()); // Promise { "LXC" }
代碼輸出的結(jié)果是Promise { "LXC" },可見async函數(shù)返回的是一個(gè)Promise對(duì)象,因此我們可以使用then方法添加回調(diào)函數(shù),從而處理async函數(shù)返回的結(jié)果。
async function lxcAsync() { return "LXC"; } lxcAsync().then((data) => { console.log(data); // LXC });await的作用
正常情況下,await命令后面是一個(gè) Promise 對(duì)象。當(dāng)然也可以是原始類型和非Promise對(duì)象,但會(huì)被轉(zhuǎn)成一個(gè)立即resolve的 Promise 對(duì)象,這是等同于同步操作。await表示函數(shù)等待promise返回結(jié)果了,再繼續(xù)執(zhí)行。
function delay() { return new Promise((resolve) => { setTimeout(() => { resolve("LXC"); }, 2000); }) } async function lxcAsync() { let de = await delay(); console.log(de); // 2s后輸出LXC } lxcAsync();注意點(diǎn) await關(guān)鍵字只能用于async函數(shù)執(zhí)行上下文中。
async function lxcAsync() { setTimeout(() => { await 1; //await is only valid in async function },1000) } lxcAsync();
上面便是一種錯(cuò)誤用法,await并沒有在lxcAsync函數(shù)執(zhí)行上下文中,而是在setTimeout的回調(diào)函數(shù)中。
async function lxcAsync() { setTimeout(() => { await 1; //await is only valid in async function },1000) } lxcAsync();
如果我們希望在某個(gè)異步函數(shù)的回調(diào)函數(shù)中使用await(如果使用過jest,應(yīng)該會(huì)知道jest的異步測(cè)試就有這種需求),我們可以使用下列方式
function lxcAsync() { setTimeout(async () => { await 1; },1000) } lxcAsync();reject錯(cuò)誤處理
如果await后面的Promise對(duì)象返回的是reject,那么我們需要如何處理呢?這時(shí)我們需要try-catch來處理。
function delay() { return new Promise((resolve, reject) => { reject("LXC"); }) } async function lxcAsync() { try { let de = await delay(); console.log(de); } catch (error) { console.log(error); //輸出LXC } } lxcAsync();
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/97435.html
摘要:的翻譯文檔由的維護(hù)很多人說,阮老師已經(jīng)有一本關(guān)于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書的目的是以目前還在制定中的ECMASc...
摘要:讓我們使用它從數(shù)組中返回一個(gè)值數(shù)組在中,我們可以這樣做,這是一種更簡(jiǎn)單的方法最重要的部分是創(chuàng)建數(shù)組,該數(shù)組立即調(diào)用所有的我們?cè)谥骱瘮?shù)中等待這些。所以在我們真正等待完成之前,主函數(shù)就退出了。 原文:https://pouchdb.com/2015/03/0... PouchDB最棘手的方面之一是它的API是異步的。在Stack Overflow、Github和IRC上,我看到了不少困惑的...
摘要:更好的語義和分別表示異步和等待,比起和更容易理解。前邊聲明關(guān)鍵字,表示內(nèi)部有內(nèi)部操作,調(diào)用函數(shù)會(huì)返回一個(gè)對(duì)象。等價(jià)于其中函數(shù)就是自動(dòng)執(zhí)行器。 async函數(shù) 定義 async函數(shù)其實(shí)就是之前說過的Generator的語法糖,用于實(shí)現(xiàn)異步操作。它是ES2017的新標(biāo)準(zhǔn)。 讀取兩個(gè)文件: const fs = require(fs) const readFile = function(f...
摘要:是最重要特性之一,它是目前為止最佳的異步解決方案了。雖然沒有在中錄入,但很快就到來,目前已經(jīng)在階段。表示暫停,表示執(zhí)行下一步,如果你不了解也沒關(guān)系,可以忽略它直接學(xué)習(xí)。 await/async 是 ES7 最重要特性之一,它是目前為止 JS 最佳的異步解決方案了。雖然沒有在 ES2016 中錄入,但很快就到來,目前已經(jīng)在 ES-Next Stage 4 階段。 直接上例子,比如我們需要...
摘要:否則不會(huì)得到異步之后的值對(duì)象的值,并沒有在中進(jìn)行處理,而是直接作為返回值返回到對(duì)象外面了這就是的魔法。當(dāng)生成器函數(shù)內(nèi)的邏輯執(zhí)行完畢且沒有錯(cuò)誤之后,這個(gè)對(duì)象返回值變?yōu)闋顟B(tài),且將生成器的返回值作為出來的值。 之前我在關(guān)于Promise的文章中提到了co這個(gè)庫(kù)。在這篇文章里,我將寫一寫自己對(duì)它的認(rèn)識(shí)。 Trust me,用了co庫(kù),你不想用別的,來它半斤異步調(diào)用你一口能吃仨。 但是我對(duì)Tj大...
閱讀 2986·2021-11-22 15:25
閱讀 2271·2021-11-18 10:07
閱讀 1075·2019-08-29 15:29
閱讀 499·2019-08-29 13:25
閱讀 1547·2019-08-29 12:58
閱讀 3230·2019-08-29 12:55
閱讀 2939·2019-08-29 12:28
閱讀 532·2019-08-29 12:16