摘要:當函數(shù)執(zhí)行時,遇到就會停止等待,直到異步操作完整之后,再繼續(xù)往下執(zhí)行。并且,函數(shù)內部語句返回的值,會成為方法回調函數(shù)的參數(shù)。拋出的錯誤對象會被方法回調函數(shù)接收到。命令后面的對象變?yōu)闋顟B(tài)只要一個語句后面的變?yōu)椋敲凑麄€函數(shù)都會中斷執(zhí)行。
async 函數(shù)是什么?
async函數(shù)是什么?一句話,它就是 Generator 函數(shù)的語法糖。
當async函數(shù)執(zhí)行時,遇到await就會停止等待,直到異步操作完整之后,再繼續(xù)往下執(zhí)行。
下面是一個例子,指定多少毫秒后函數(shù)返回一個值
async function asyncReturn(value, ms) { await new Promise(function(resolve, reject) { setTimeout(resolve, ms); }); return value; }
async函數(shù)返回一個 Promise 對象,可以使用then方法添加回調函數(shù)。并且,async函數(shù)內部return語句返回的值,會成為then方法回調函數(shù)的參數(shù)。
asyncReturn("Hello World", 3000).then(value => { console.log(value); });async 函數(shù)的錯誤處理機制
async函數(shù)內部拋出錯誤,會導致返回的 Promise 對象變?yōu)閞eject狀態(tài)。拋出的錯誤對象會被catch方法回調函數(shù)接收到。
async function fn1() { throw new Error("async 函數(shù)內部拋出錯誤了!"); } fn1().catch(err => { console.log(err); });
await命令后面的 Promise 對象如果變?yōu)閞eject狀態(tài),則reject的參數(shù)會被catch方法的回調函數(shù)接收到。
async function fn2() { await Promise.reject("await命令后面的 Promise 對象變?yōu)閞eject狀態(tài)"); } fn2().catch(err => { console.log(err); });
只要一個await語句后面的 Promise 變?yōu)閞eject,那么整個async函數(shù)都會中斷執(zhí)行。
async function fn3() { await Promise.reject("出錯了"); await Promise.resolve("hello world"); // 不會執(zhí)行 } fn3().catch(err => { console.log(err); });
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.hztianpu.com/yun/91968.html
摘要:文章起因今天在學習一個的測試框架中,在閱讀文檔時看到用來判斷是否支持函數(shù)的代碼。 文章起因 今天在學習Jasmine(一個Javascript的測試框架)中,在閱讀文檔時看到用來判斷是否支持async函數(shù)的代碼。 // 獲取async函數(shù)的原型的構造器 function getAsyncCtor() { try { eval(var func = async fun...
摘要:想閱讀更多優(yōu)質文章請猛戳博客一年百來篇優(yōu)質文章等著你引入的在的異步編程中是一個極好的改進??赡軙a(chǎn)生誤導一些文章將與進行了比較,并聲稱它是下一代異步編程風格,對此作者深表異議。結論引入的關鍵字無疑是對異步編程的改進。 showImg(https://segmentfault.com/img/bVbjFP0?w=800&h=450); 想閱讀更多優(yōu)質文章請猛戳GitHub博客,一年百來篇...
摘要:分鐘讀完以前我們使用。把異步變成了同步。允許同時執(zhí)行所有的異步函數(shù)函數(shù)總耗時為秒的耗時。的錯誤處理在語法中,我們可以使用進行錯誤處理。在中的分支會進入語句。閱讀原文討論地址分鐘學會的如果你想?yún)⑴c討論,請點擊這里 1 分鐘讀完 JavaScript Async/Await Explained in 10 Minutes showImg(https://segmentfault.com/i...
摘要:事件循環(huán)背景是一門單線程非阻塞的腳本語言,單線程意味著,代碼在執(zhí)行的任何時候,都只有一個主線程來處理所有的任務。在意識到該問題之際,新特性中的可以讓成為一門多線程語言,但實際開發(fā)中使用存在著諸多限制。這個地方被稱為執(zhí)行棧。 事件循環(huán)(Event Loop) 背景 JavaScript是一門單線程非阻塞的腳本語言,單線程意味著,JavaScript代碼在執(zhí)行的任何時候,都只有一個主線程來...
摘要:因為函數(shù)返回一個對象,所以可以用于等待一個函數(shù)的返回值這也可以說是在等函數(shù),但要清楚,它等的實際是一個返回值。幫我們干了啥作個簡單的比較上面已經(jīng)說明了會將其后的函數(shù)函數(shù)表達式或的返回值封裝成一個對象,而會等待這個完成,并將其的結果返回出來。 隨著 Node 7 的發(fā)布,越來越多的人開始研究據(jù)說是異步編程終級解決方案的 async/await。我第一次看到這組關鍵字并不是在 JavaSc...
摘要:控制臺將顯示回調地獄通常,回調只能由一個異步函數(shù)調用。更多資源使更友好規(guī)范使用異步函數(shù)簡化異步編碼旅程異步編程是一項在中無法避免的挑戰(zhàn)。 JavaScript經(jīng)常聲稱是_異步_。那是什么意思?它如何影響發(fā)展?近年來這種方法有何變化? 請思考以下代碼: result1 = doSomething1(); result2 = doSomething2(result1); 大多數(shù)語言都處理每...
閱讀 1539·2021-11-24 09:39
閱讀 1845·2021-11-22 15:25
閱讀 3815·2021-11-19 09:40
閱讀 3357·2021-09-22 15:31
閱讀 1370·2021-07-29 13:49
閱讀 1306·2019-08-26 11:59
閱讀 1380·2019-08-26 11:39
閱讀 986·2019-08-26 11:00