成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

理解ES7中的async函數(shù)

curried / 2342人閱讀

摘要:什么是標(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è)立即resolvePromise 對(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

相關(guān)文章

  • ES6-7

    摘要:的翻譯文檔由的維護(hù)很多人說,阮老師已經(jīng)有一本關(guān)于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書的目的是以目前還在制定中的ECMASc...

    mudiyouyou 評(píng)論0 收藏0
  • 翻譯:Taming the asynchronous beast with ES7

    摘要:讓我們使用它從數(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上,我看到了不少困惑的...

    Eastboat 評(píng)論0 收藏0
  • ES6&ES7中的異步之async函數(shù)

    摘要:更好的語義和分別表示異步和等待,比起和更容易理解。前邊聲明關(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...

    dongxiawu 評(píng)論0 收藏0
  • 快速理解和使用 ES7 await/async

    摘要:是最重要特性之一,它是目前為止最佳的異步解決方案了。雖然沒有在中錄入,但很快就到來,目前已經(jīng)在階段。表示暫停,表示執(zhí)行下一步,如果你不了解也沒關(guān)系,可以忽略它直接學(xué)習(xí)。 await/async 是 ES7 最重要特性之一,它是目前為止 JS 最佳的異步解決方案了。雖然沒有在 ES2016 中錄入,但很快就到來,目前已經(jīng)在 ES-Next Stage 4 階段。 直接上例子,比如我們需要...

    Kross 評(píng)論0 收藏0
  • 用co玩轉(zhuǎn)異步

    摘要:否則不會(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大...

    microelec 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<