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

資訊專欄INFORMATION COLUMN

JavaScript async 函數(shù)

goji / 1195人閱讀

摘要:當(dāng)函數(shù)執(zhí)行時(shí),遇到就會(huì)停止等待,直到異步操作完整之后,再繼續(xù)往下執(zhí)行。并且,函數(shù)內(nèi)部語(yǔ)句返回的值,會(huì)成為方法回調(diào)函數(shù)的參數(shù)。拋出的錯(cuò)誤對(duì)象會(huì)被方法回調(diào)函數(shù)接收到。命令后面的對(duì)象變?yōu)闋顟B(tài)只要一個(gè)語(yǔ)句后面的變?yōu)椋敲凑麄€(gè)函數(shù)都會(huì)中斷執(zhí)行。

async 函數(shù)是什么?

async函數(shù)是什么?一句話,它就是 Generator 函數(shù)的語(yǔ)法糖。

當(dāng)async函數(shù)執(zhí)行時(shí),遇到await就會(huì)停止等待,直到異步操作完整之后,再繼續(xù)往下執(zhí)行。

下面是一個(gè)例子,指定多少毫秒后函數(shù)返回一個(gè)值

async function asyncReturn(value, ms) {
    await new Promise(function(resolve, reject) {
        setTimeout(resolve, ms);
    });
    return value;
}

async函數(shù)返回一個(gè) Promise 對(duì)象,可以使用then方法添加回調(diào)函數(shù)。并且,async函數(shù)內(nèi)部return語(yǔ)句返回的值,會(huì)成為then方法回調(diào)函數(shù)的參數(shù)。

asyncReturn("Hello World", 3000).then(value => {
    console.log(value);
});

async 函數(shù)的錯(cuò)誤處理機(jī)制

async函數(shù)內(nèi)部拋出錯(cuò)誤,會(huì)導(dǎo)致返回的 Promise 對(duì)象變?yōu)閞eject狀態(tài)。拋出的錯(cuò)誤對(duì)象會(huì)被catch方法回調(diào)函數(shù)接收到。

async function fn1() {
    throw new Error("async 函數(shù)內(nèi)部拋出錯(cuò)誤了!");
}
fn1().catch(err => {
    console.log(err);
});

await命令后面的 Promise 對(duì)象如果變?yōu)閞eject狀態(tài),則reject的參數(shù)會(huì)被catch方法的回調(diào)函數(shù)接收到。

async function fn2() {
    await Promise.reject("await命令后面的 Promise 對(duì)象變?yōu)閞eject狀態(tài)");
}
fn2().catch(err => {
    console.log(err);
});

只要一個(gè)await語(yǔ)句后面的 Promise 變?yōu)閞eject,那么整個(gè)async函數(shù)都會(huì)中斷執(zhí)行。

async function fn3() {
    await Promise.reject("出錯(cuò)了");
    await Promise.resolve("hello world"); // 不會(huì)執(zhí)行
}
fn3().catch(err => {
    console.log(err);
});

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/91968.html

相關(guān)文章

  • 而井教你判斷當(dāng)前Javascript運(yùn)行環(huán)境是否支持async函數(shù)

    摘要:文章起因今天在學(xué)習(xí)一個(gè)的測(cè)試框架中,在閱讀文檔時(shí)看到用來(lái)判斷是否支持函數(shù)的代碼。 文章起因 今天在學(xué)習(xí)Jasmine(一個(gè)Javascript的測(cè)試框架)中,在閱讀文檔時(shí)看到用來(lái)判斷是否支持async函數(shù)的代碼。 // 獲取async函數(shù)的原型的構(gòu)造器 function getAsyncCtor() { try { eval(var func = async fun...

    hot_pot_Leo 評(píng)論0 收藏0
  • 如何正確合理使用 JavaScript async/await !

    摘要:想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳博客一年百來(lái)篇優(yōu)質(zhì)文章等著你引入的在的異步編程中是一個(gè)極好的改進(jìn)。可能會(huì)產(chǎn)生誤導(dǎo)一些文章將與進(jìn)行了比較,并聲稱它是下一代異步編程風(fēng)格,對(duì)此作者深表異議。結(jié)論引入的關(guān)鍵字無(wú)疑是對(duì)異步編程的改進(jìn)。 showImg(https://segmentfault.com/img/bVbjFP0?w=800&h=450); 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來(lái)篇...

    trigkit4 評(píng)論0 收藏0
  • 1 分鐘讀完《10 分鐘學(xué)會(huì) JavaScriptAsync/Await》

    摘要:分鐘讀完以前我們使用。把異步變成了同步。允許同時(shí)執(zhí)行所有的異步函數(shù)函數(shù)總耗時(shí)為秒的耗時(shí)。的錯(cuò)誤處理在語(yǔ)法中,我們可以使用進(jìn)行錯(cuò)誤處理。在中的分支會(huì)進(jìn)入語(yǔ)句。閱讀原文討論地址分鐘學(xué)會(huì)的如果你想?yún)⑴c討論,請(qǐng)點(diǎn)擊這里 1 分鐘讀完 JavaScript Async/Await Explained in 10 Minutes showImg(https://segmentfault.com/i...

    wapeyang 評(píng)論0 收藏0
  • 淺談JavaScript中的事件循環(huán)機(jī)制

    摘要:事件循環(huán)背景是一門單線程非阻塞的腳本語(yǔ)言,單線程意味著,代碼在執(zhí)行的任何時(shí)候,都只有一個(gè)主線程來(lái)處理所有的任務(wù)。在意識(shí)到該問(wèn)題之際,新特性中的可以讓成為一門多線程語(yǔ)言,但實(shí)際開(kāi)發(fā)中使用存在著諸多限制。這個(gè)地方被稱為執(zhí)行棧。 事件循環(huán)(Event Loop) 背景 JavaScript是一門單線程非阻塞的腳本語(yǔ)言,單線程意味著,JavaScript代碼在執(zhí)行的任何時(shí)候,都只有一個(gè)主線程來(lái)...

    Pluser 評(píng)論0 收藏0
  • 理解 JavaScriptasync/await

    摘要:因?yàn)楹瘮?shù)返回一個(gè)對(duì)象,所以可以用于等待一個(gè)函數(shù)的返回值這也可以說(shuō)是在等函數(shù),但要清楚,它等的實(shí)際是一個(gè)返回值。幫我們干了啥作個(gè)簡(jiǎn)單的比較上面已經(jīng)說(shuō)明了會(huì)將其后的函數(shù)函數(shù)表達(dá)式或的返回值封裝成一個(gè)對(duì)象,而會(huì)等待這個(gè)完成,并將其的結(jié)果返回出來(lái)。 隨著 Node 7 的發(fā)布,越來(lái)越多的人開(kāi)始研究據(jù)說(shuō)是異步編程終級(jí)解決方案的 async/await。我第一次看到這組關(guān)鍵字并不是在 JavaSc...

    tracymac7 評(píng)論0 收藏0
  • 現(xiàn)代JS中的流程控制:詳解Callbacks 、Promises 、Async/Await

    摘要:控制臺(tái)將顯示回調(diào)地獄通常,回調(diào)只能由一個(gè)異步函數(shù)調(diào)用。更多資源使更友好規(guī)范使用異步函數(shù)簡(jiǎn)化異步編碼旅程異步編程是一項(xiàng)在中無(wú)法避免的挑戰(zhàn)。 JavaScript經(jīng)常聲稱是_異步_。那是什么意思?它如何影響發(fā)展?近年來(lái)這種方法有何變化? 請(qǐng)思考以下代碼: result1 = doSomething1(); result2 = doSomething2(result1); 大多數(shù)語(yǔ)言都處理每...

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

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

0條評(píng)論

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