国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Async/Await替代Promise的6個理由

2024-05-06 15:38:01
字體:
來源:轉載
供稿:網友

前言

Node.js 7.6 已經支持 async/await 了,如果你還沒有試過,這篇博客將告訴你為什么要用它。

Async/Await 簡介

對于從未聽說過 async/await 的朋友,下面是簡介:

async/await 是寫異步代碼的新方式,以前的方法有回調函數和Promise。 async/await 是基于 Promise 實現的,它不能用于普通的回調函數。 async/await 與 Promise 一樣,是非阻塞的。 async/await 使得異步代碼看起來像同步代碼,這正是它的魔力所在。

Async/Await 語法

示例中,getJSON 函數返回一個 promise,這個 promise 成功 resolve 時會返回一個 json 對象。我們只是調用這個函數,打印返回的 JSON 對象,然后返回”done”。

使用 Promise 是這樣的:

const makeRequest = () =>getJSON().then(data => {console.log(data);return "done";});makeRequest();

使用 Async/Await 是這樣的:

const makeRequest = async () => {console.log(await getJSON());return "done";};makeRequest();

它們有一些細微不同:

函數前面多了一個 async 關鍵字。await 關鍵字只能用在 async 定義的函數內。async 函數會隱式地返回一個 promise,該 promise 的 reosolve 值就是函數 return 的值。(示例中 reosolve 值就是字符串”done”)

第 1 點暗示我們不能在最外層代碼中使用 await,因為不在 async 函數內。

// 不能在最外層代碼中使用awaitawait makeRequest();// 這是會出事情的makeRequest().then(result => {// 代碼});

await getJSON()表示 console.log 會等到 getJSON 的 promise 成功 reosolve 之后再執行。

為什么 Async/Await 更好?

1. 簡潔

由示例可知,使用 Async/Await 明顯節約了不少代碼。我們不需要寫.then,不需要寫匿名函數處理 Promise 的 resolve 值,也不需要定義多余的 data 變量,還避免了嵌套代碼。這些小的優點會迅速累計起來,這在之后的代碼示例中會更加明顯。

2. 錯誤處理

Async/Await 讓 try/catch 可以同時處理同步和異步錯誤。在下面的 promise 示例中,try/catch 不能處理 JSON.parse 的錯誤,因為它在 Promise 中。我們需要使用.catch,這樣錯誤處理代碼非常冗余。并且,在我們的實際生產代碼會更加復雜。

const makeRequest = () => {try {getJSON().then(result => {// JSON.parse可能會出錯const data = JSON.parse(result);console.log(data);});// 取消注釋,處理異步代碼的錯誤// .catch((err) => {// console.log(err)// })} catch (err) {console.log(err);}};

使用 async/await 的話,catch 能處理 JSON.parse 錯誤:

const makeRequest = async () => {try {// this parse may failconst data = JSON.parse(await getJSON());console.log(data);} catch (err) {console.log(err);}};            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 兖州市| 上高县| 康马县| 西充县| 桂平市| 朝阳区| 南川市| 新民市| 凭祥市| 黎平县| 新龙县| 怀化市| 西藏| 永靖县| 大渡口区| 日土县| 肇庆市| 长葛市| 和林格尔县| 城口县| 松桃| 青浦区| 镇安县| 万载县| 仲巴县| 东宁县| 延川县| 湘西| 双流县| 阜阳市| 泗洪县| 额尔古纳市| 张家港市| 宁远县| 庆安县| 江城| 新龙县| 疏附县| 和田县| 宝鸡市| 广安市|