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