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

資訊專(zhuān)欄INFORMATION COLUMN

JavaScript基礎(chǔ)——深入學(xué)習(xí)async/await

張金寶 / 442人閱讀

摘要:等待的基本語(yǔ)法該關(guān)鍵字的的意思就是讓編譯器等待并返回結(jié)果。這里并不會(huì)占用資源,因?yàn)橐婵梢酝瑫r(shí)執(zhí)行其他任務(wù)其他腳本或處理事件。接下來(lái),我們寫(xiě)一個(gè)火箭發(fā)射場(chǎng)景的小例子不是真的發(fā)射火箭

本文由云+社區(qū)發(fā)表

本篇文章,小編將和大家一起學(xué)習(xí)異步編程的未來(lái)——async/await,它會(huì)打破你對(duì)上篇文章Promise的認(rèn)知,竟然異步代碼還能這么寫(xiě)! 但是別太得意,你需要深入理解Promise后,才能更好的的駕馭async/await,因?yàn)?strong>async/await是基于Promise的。

關(guān)于async / await

用于編寫(xiě)異步程序

代碼書(shū)寫(xiě)方式和同步編碼十分相似,因此代碼十分簡(jiǎn)潔易讀

基于Promise

您可以使用try-catch常規(guī)的方法捕獲異常

ES8中引入了async/await,目前幾乎所有的現(xiàn)代瀏覽器都已支持這個(gè)特性(除了IE和Opera不支持)

你可以輕松設(shè)置斷點(diǎn),調(diào)試更容易。

從async開(kāi)始學(xué)起

讓我們從async關(guān)鍵字開(kāi)始吧,這個(gè)關(guān)鍵字可以放在函數(shù)之前,如下所示:

async function f() { 
 return 1; 
}

在函數(shù)之間加上async意味著:函數(shù)將返回一個(gè)Promise,雖然你的代碼里沒(méi)有顯示的聲明返回一個(gè)Promise,但是編譯器會(huì)自動(dòng)將其轉(zhuǎn)換成一個(gè)Promise,不信你可以使用Promisethen方法試試:

async function f() { 
 return 1; 
} 
f().then(alert); // 1

...如果你不放心的話(huà),你可以在代碼里明確返回一個(gè)Promise,輸出結(jié)果是相同的。

async function f() { 
 return Promise.resolve(1); 
} 
f().then(alert); // 1

很簡(jiǎn)單吧,小編之所以說(shuō) async/await 是基于Promise是沒(méi)毛病的,async函數(shù)返回一個(gè)Promise,很簡(jiǎn)單吧,不僅如此,還有一個(gè)關(guān)鍵字await,await只能在async中運(yùn)行。

等待——await

await的基本語(yǔ)法:

let value=await promise;

該關(guān)鍵字的await的意思就是讓JS編譯器等待Promise并返回結(jié)果。接下來(lái)我們看一段簡(jiǎn)單的示例:

async function f() { 
 let promise = new Promise((resolve, reject) => { 
 setTimeout(() => resolve("done!"), 1000) 
 }); 
 let result = await promise; // wait till the promise resolves (*) 
 alert(result); // "done!" 
} 
f();

函數(shù)執(zhí)行將會(huì)在 let result = await promise 這一行暫停,直到Promise返回結(jié)果,因此上述代碼將會(huì)1秒后,在瀏覽器彈出“done”的提示框。

小編在此強(qiáng)調(diào)下:

await的字面意思就是讓JavaScript等到Promise結(jié)束,然后輸出結(jié)果。這里并不會(huì)占用CPU資源,因?yàn)橐婵梢酝瑫r(shí)執(zhí)行其他任務(wù):其他腳本或處理事件。

不能多帶帶使用await,必須在async函數(shù)作用域下使用,否則將會(huì)報(bào)出異?!癊rror: await is only valid in async function”,示例代碼如下:

function f() { 
 let promise = Promise.resolve(1); 
 let result = await promise; // Syntax error 
}
接下來(lái),小編將和大家一起來(lái)親自動(dòng)手實(shí)踐以下內(nèi)容:

async與Promise.then的結(jié)合,依次處理多個(gè)結(jié)果

使用await替代Promise.then,依次處理多個(gè)結(jié)果

同時(shí)等待多個(gè)結(jié)果

使用Promise.all收集多個(gè)結(jié)果

使用try-catch捕獲異常

如何捕獲Promise.all中的異常

使用finally確保函數(shù)執(zhí)行

一起動(dòng)手之前,確保你安裝了Node,NPM相關(guān)工具,谷歌瀏覽器,為了預(yù)覽代碼效果,小編使用 npm install http-server -g 命令快速部署了web服務(wù)環(huán)境,方便我們運(yùn)行代碼。接下來(lái),我們寫(xiě)一個(gè)火箭發(fā)射場(chǎng)景的小例子(不是真的發(fā)射火箭

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

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

相關(guān)文章

  • ES6-7

    摘要:的翻譯文檔由的維護(hù)很多人說(shuō),阮老師已經(jīng)有一本關(guān)于的書(shū)了入門(mén),覺(jué)得看看這本書(shū)就足夠了。前端的異步解決方案之和異步編程模式在前端開(kāi)發(fā)過(guò)程中,顯得越來(lái)越重要。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(shū)(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書(shū)的目的是以目前還在制定中的ECMASc...

    mudiyouyou 評(píng)論0 收藏0
  • ES2017異步函數(shù)現(xiàn)已正式可用

    摘要:標(biāo)準(zhǔn)已于年月份正式定稿了,并廣泛支持最新的特性異步函數(shù)。為了領(lǐng)會(huì),我們需要回到普通回調(diào)函數(shù)中進(jìn)一步學(xué)習(xí)。從此編寫(xiě)回調(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ù)或多或...

    android_c 評(píng)論0 收藏0
  • JavaScript 異步

    摘要:從最開(kāi)始的到封裝后的都在試圖解決異步編程過(guò)程中的問(wèn)題。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。寫(xiě)一個(gè)符合規(guī)范并可配合使用的寫(xiě)一個(gè)符合規(guī)范并可配合使用的理解的工作原理采用回調(diào)函數(shù)來(lái)處理異步編程。 JavaScript怎么使用循環(huán)代替(異步)遞歸 問(wèn)題描述 在開(kāi)發(fā)過(guò)程中,遇到一個(gè)需求:在系統(tǒng)初始化時(shí)通過(guò)http獲取一個(gè)第三方服務(wù)器端的列表,第三方服務(wù)器提供了一個(gè)接口,可通過(guò)...

    tuniutech 評(píng)論0 收藏0
  • 【全文】狼叔:如何正確的學(xué)習(xí)Node.js

    摘要:感謝大神的免費(fèi)的計(jì)算機(jī)編程類(lèi)中文書(shū)籍收錄并推薦地址,以后在倉(cāng)庫(kù)里更新地址,聲音版全文狼叔如何正確的學(xué)習(xí)簡(jiǎn)介現(xiàn)在,越來(lái)越多的科技公司和開(kāi)發(fā)者開(kāi)始使用開(kāi)發(fā)各種應(yīng)用。 說(shuō)明 2017-12-14 我發(fā)了一篇文章《沒(méi)用過(guò)Node.js,就別瞎逼逼》是因?yàn)橛腥嗽谥跎虾贜ode.js。那篇文章的反響還是相當(dāng)不錯(cuò)的,甚至連著名的hax賀老都很認(rèn)同,下班時(shí)讀那篇文章,竟然坐車(chē)的還坐過(guò)站了。大家可以很...

    Edison 評(píng)論0 收藏0
  • 【全文】狼叔:如何正確的學(xué)習(xí)Node.js

    摘要:感謝大神的免費(fèi)的計(jì)算機(jī)編程類(lèi)中文書(shū)籍收錄并推薦地址,以后在倉(cāng)庫(kù)里更新地址,聲音版全文狼叔如何正確的學(xué)習(xí)簡(jiǎn)介現(xiàn)在,越來(lái)越多的科技公司和開(kāi)發(fā)者開(kāi)始使用開(kāi)發(fā)各種應(yīng)用。 說(shuō)明 2017-12-14 我發(fā)了一篇文章《沒(méi)用過(guò)Node.js,就別瞎逼逼》是因?yàn)橛腥嗽谥跎虾贜ode.js。那篇文章的反響還是相當(dāng)不錯(cuò)的,甚至連著名的hax賀老都很認(rèn)同,下班時(shí)讀那篇文章,竟然坐車(chē)的還坐過(guò)站了。大家可以很...

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

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

0條評(píng)論

張金寶

|高級(jí)講師

TA的文章

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