摘要:函數(shù)用于實(shí)現(xiàn)異步執(zhí)行事件返回值一個(gè)對(duì)象,這個(gè)對(duì)象當(dāng)函數(shù)開始執(zhí)行時(shí)被創(chuàng)建。當(dāng)函數(shù)返回值時(shí),的方法會(huì)傳遞這個(gè)值。示例函數(shù)返回值假設(shè)函數(shù)返回的對(duì)象為如果一個(gè)意味著現(xiàn)在反映了這個(gè)的狀態(tài)。
async 函數(shù)
用于實(shí)現(xiàn)異步執(zhí)行事件 返回值:一個(gè)Promise對(duì)象,這個(gè)Promise對(duì)象當(dāng) async 函數(shù)開始執(zhí)行時(shí)被創(chuàng)建。 當(dāng) async 函數(shù)返回值時(shí), Promise 的 resolve 方法會(huì)傳遞這個(gè)值。 當(dāng) async 函數(shù)拋出異常時(shí),Promise 的 reject 方法會(huì)傳遞這個(gè)異常。 示例1: async 函數(shù)返回值 假設(shè)async 函數(shù)返回的Promise對(duì)象為p a) 如果return一個(gè)Promise, 意味著p現(xiàn)在反映了這個(gè) Promise 的狀態(tài)。 async function asyncFunc() { return Promise.resolve(123); } asyncFunc() .then(x => console.log(x)); // 123 b) 如果return一個(gè)非Promise的值,則用這個(gè)值實(shí)現(xiàn)p async function asyncFunc() { return 123; } asyncFunc() .then(x => console.log(x)); // 123 示例2: async 函數(shù)拋出異常 async function asyncFunc() { throw new Error("Problem!"); } asyncFunc() .catch(err => console.log(err)); // Error: Problem!await 操作符
用于等待一個(gè)Promise 對(duì)象。 a) 它只能在 async function 中使用。 b) await 只影響直接包含它的異步函數(shù) 返回值:返回 Promise 對(duì)象的處理結(jié)果。 a) 如果等待的不是 Promise 對(duì)象,則返回該值本身。 示例1:await在非async函數(shù)中使用,會(huì)出現(xiàn)語法錯(cuò)誤 function asyncFunc() { let res = await 123; return res; } asyncFunc() // Uncaught SyntaxError: await is only valid in async function 示例2:await 等待非promise async function asyncFunc() { let res = await 123; console.log(res); // 123 return res; } asyncFunc() .then(x => console.log(x)); // 123 示例3:await 等待promise對(duì)象 async function asyncFunc() { let res = await Promise.resolve(123); console.log(res);// Promise?{await 是按順序執(zhí)行的, Promise.all() 是并行執(zhí)行的: 123 ...} return res; } asyncFunc() .then(x => console.log(x)); // 123
a) 按順序等待兩個(gè)Promise async function fun() { const result1 = await func1(); const result2 = await func2(); } func1 |-----------| func2 |--------------------| fun執(zhí)行完 b) 等待一個(gè)Promise, 這個(gè)Promise是一個(gè)包含兩個(gè)元素的數(shù)組 async function fun() { const [result1, result2] = await Promise.all([ func1(), func2(), ]); } func1 |-----------| func2 |--------------------| fun執(zhí)行完 a) 適用于func2的執(zhí)行必須在func1執(zhí)行完后才有效的場(chǎng)景 b) 使用于func2和func1互相不影響的場(chǎng)景async使用
示例1:獲取http://example.com頁(yè)面 async function fetchData(url) { try { let response = await fetch(url); let text = await response.text(); return text; } catch (error) { throw new Error(error); } } fetchData("https://cors-anywhere.herokuapp.com/http://example.com") .then(data => console.log(data)) .catch(err => console.log(err)); fetchData 的返回值為promise p 執(zhí)行流程圖如下:
示例2:按順序請(qǐng)求多個(gè)url結(jié)果 async function fetchData(urls) { try { let results = []; for (const url of urls) { const response = await fetch(url); let text = await response.text(); results.push(text); } return results; } catch (error) { throw new Error(error); } } const urls = [ "https://cors-anywhere.herokuapp.com/http://example.com", "https://cors-anywhere.herokuapp.com/http://www.w3school.com.cn/" ]; fetchData(urls) .then(data => console.log(data)) .catch(err => console.log(err));
示例3:并行請(qǐng)求多個(gè)url結(jié)果 async function fetchData(urls) { try { let promises = urls.map(async (url) => { const response = await fetch(url); return response.text(); }); let results = await Promise.all(promises); return results; } catch (error) { throw new Error(error); } } const urls = [ "https://cors-anywhere.herokuapp.com/http://www.w3school.com.cn/", "https://cors-anywhere.herokuapp.com/http://example.com" ]; fetchData(urls) .then(data => console.log(data)) .catch(err => console.log(err));
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/106103.html
摘要:標(biāo)準(zhǔn)已于年月份正式定稿了,并廣泛支持最新的特性異步函數(shù)。為了領(lǐng)會(huì),我們需要回到普通回調(diào)函數(shù)中進(jìn)一步學(xué)習(xí)。從此編寫回調(diào)函數(shù)不再那么痛苦。回調(diào)是一個(gè)函數(shù),可以將結(jié)果傳遞給函數(shù)并在該函數(shù)內(nèi)進(jìn)行調(diào)用,以便作為事件的響應(yīng)。 ES2017標(biāo)準(zhǔn)已于2017年6月份正式定稿了,并廣泛支持最新的特性:異步函數(shù)。如果你曾經(jīng)被異步 JavaScript 的邏輯困擾,這么新函數(shù)正是為你設(shè)計(jì)的。 異步函數(shù)或多或...
摘要:正常函數(shù)異常函數(shù)注意當(dāng)返回值本身就是一個(gè)對(duì)象時(shí),函數(shù)的并不會(huì)對(duì)返回值進(jìn)行二次包裝。總是按順序執(zhí)行使用函數(shù)之前,我們還得搞清楚它的運(yùn)行機(jī)制。因此在函數(shù)中的并不會(huì)掛起整個(gè)函數(shù)的執(zhí)行。 隨著node 7.6.0正式實(shí)裝async/await函數(shù),js的異步編程變的比以往更加容易。但是,在我們?nèi)嫱度隺sync/await的懷抱之前,有必要對(duì)這個(gè)特性做一些細(xì)致的了解。 書寫形式 基本上,任何一...
摘要:定期召開會(huì)議,會(huì)議由會(huì)員公司的代表與特邀專家出席。新版本將會(huì)包含每年截止時(shí)間之前完成的所有特性。它引入了一個(gè)新的構(gòu)造函數(shù)和具有輔助函數(shù)的命名空間對(duì)象。 導(dǎo)言:ECMAScript的演化不會(huì)停止,但是我們完全沒必要害怕。除了ES6這個(gè)史無前例的版本帶來了海量的信息和知識(shí)點(diǎn)以外,之后每年一發(fā)的版本都僅僅帶有少量的增量更新,一年更新的東西花半個(gè)小時(shí)就能搞懂了,完全沒必要畏懼。本文將帶您花大約...
摘要:距離上一篇走馬觀花已經(jīng)快兩年時(shí)間了,上個(gè)月底正式發(fā)布,再寫一篇姊妹篇,介紹新特性。會(huì)議的每一項(xiàng)決議必須大部分人贊同,并且沒有人強(qiáng)烈反對(duì)才可以通過。已經(jīng)準(zhǔn)備就緒,該特性會(huì)出現(xiàn)在年度發(fā)布的規(guī)范之中。 距離上一篇《ES6 走馬觀花》已經(jīng)快兩年時(shí)間了,上個(gè)月底 ES8 正式發(fā)布,再寫一篇姊妹篇,介紹 ES8 新特性。 什么是 ES8 ES8 是 ECMA-262 標(biāo)準(zhǔn)第 8 版的簡(jiǎn)稱,從 ES...
摘要:特性概述整理自,歸納于筆者的現(xiàn)代開發(fā)語法基礎(chǔ)與實(shí)踐技巧系列文章中也歡迎關(guān)注前端每周清單系列獲得一手資訊。本部分則介紹了新的構(gòu)造器與包含靜態(tài)方法的命名空間對(duì)象。 ECMAScript 2017(ES8)特性概述 整理自 ES8 was Released and here are its Main New Features,歸納于筆者的現(xiàn)代 JavaScript 開發(fā):語法基礎(chǔ)與實(shí)踐技巧系...
閱讀 2628·2021-11-23 09:51
閱讀 2418·2021-09-30 09:48
閱讀 2044·2021-09-22 15:24
閱讀 1009·2021-09-06 15:02
閱讀 3303·2021-08-17 10:14
閱讀 1934·2021-07-30 18:50
閱讀 1980·2019-08-30 15:53
閱讀 3167·2019-08-29 18:43