日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JS Generator 函數的含義與用法實例總結

瀏覽:266日期:2024-05-13 16:18:23

本文實例講述了JS Generator 函數的含義與用法。分享給大家供大家參考,具體如下:

讀阮一峰老師《Generator 函數的含義與用法》總結

老師的文章通俗易懂,但是我個人理解上面有一些差,所以看了幾遍之后才有呢么一點點體會

把它記錄下來。

還是那句話,所有事物的出現都是為了解決對應的問題。

那么Generator出現是為了解決什么問題的呢?

在異步編程的場景下,如果有多個異步任務,如何處理他們的先后執行順序?

舉一個常見的例子,jquery的ajax請求,每一個success都是一個異步任務。

那么問題來了,如果我要保證頁面渲染要在5個網絡請求都回來之后再去渲染頁面。

我們的代碼就會變成:

$.ajax({...success:function(data){ $.ajax({...success:function(data){ $.ajax({...success:function(data){ $.ajax({...success:function(data){$.ajax({...success:function(data){ //do something}}) }}) }}) }})}})

這就是”回調函數噩夢”(callback hell)

為了解決這個問題,后來出現了Deferred和promise

兩者區別不大,通過一種包裝寫法來減少回調函數

上面的ajax就可以寫成:

ajax1 = $.ajax({...success:function(data){});ajax2 = $.ajax({...success:function(data){});ajax3 = $.ajax({...success:function(data){});ajax4 = $.ajax({...success:function(data){});ajax5 = $.ajax({...success:function(data){});$.when(ajax1,ajax2,ajax3,ajax4,ajax5).done(function( //do something)).then(function(){ //do something2})

1.8版本以上的jquery ajax模塊默認返回Deferred對象

Deferred和promise將回調函數做拆分,將異步任務的處理和執行分成兩部分完成

他們最大的問題就是代碼冗余,包裝之后的代碼都需要通過then,done來執行后面的內容,也導致層次感不清晰

那有沒有一種比較無感,簡單的寫法呢?

那就是協程,我之前也是在這個地方困惑了很久,前面說的大多日常用到過,也清楚一些原理,關于協程用到的就少了,我們來分析下吧。

直接看一下協程的例子:

function asnycJob() { // ...其他代碼 var f = yield readFile(fileA); // ...其他代碼}

阮一峰老師的原話:

上面代碼的函數 asyncJob 是一個協程,它的奧妙就在其中的 yield 命令。它表示執行到此處,執行權將交給其他協程。也就是說,yield命令是異步兩個階段的分界線。 協程遇到 yield 命令就暫停,等到執行權返回,再從暫停的地方繼續往后執行。它的最大優點,就是代碼的寫法非常像同步操作,如果去除yield命令,簡直一模一樣。

之前沒理解的原因就是沒好好讀這兩句話,今認真看了一下,茅塞頓開。重要的有這么幾點

首先asnycJob這個方法就是一個協程

yield相當于return,會返回當前程序的執行狀態

當執行到yield,程序掛起等待返回后繼續執行。

掛起這段時間去執行其他協程函數

Generator函數是ES6對協程函數的實現,

Generator函數的特點就是可以暫停代碼執行。

跟協程函數一樣,遇到yield關鍵字就暫停代碼執行,

跟普通函數的區別在于Generator函數不會反悔結果,而是返回指針對象,

通過指針的next方法移動指針指向下一個yield關鍵字位置。

也就是說Generator函數的分階段執行是由next方法控制的。

使用了Generator函數之后會對我們的代碼有多大的改變呢?

fangction* gen(){ var url = ’user/get/info’; var data = yield $.get({url:url}); console.log(data.userName);}

你不需要擔心遠程接口的返回時機,完全按照同步的方式寫代碼就行。

但是也有缺點,Generator函數把一步操作做的很簡潔,但對流程的管理卻不方便,

上面的例子如何執行?

var g = gen();g.next();g.next();

next 方法的作用是分階段執行 Generator 函數。每次調用 next 方法,會返回一個對象,

表示當前階段的信息( value 屬性和 done 屬性)。value 屬性是 yield 語句后面表達式的值,表示當前階段的值;

done 屬性是一個布爾值,表示 Generator 函數是否執行完畢,即是否還有下一個階段。

你需要執行兩次.next方法,來將你的Generator函數執行完畢。

關于如何自動化異步任務的流程管理,就需要co,thunk,async的幫助了

原文:Generator 函數的含義與用法

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容可查看本站專題:《JavaScript常用函數技巧匯總》、《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品不卡| 色综合视频一区二区三区日韩| 免费成人在线影院| 亚洲一区中文| 亚洲久久在线| 日韩中文字幕一区二区三区| 视频一区视频二区中文| 蜜臀av国产精品久久久久| 综合激情视频| 久久国产麻豆精品| 欧美丰满日韩| 日韩一区二区久久| 亚洲欧美网站在线观看| 久久狠狠久久| 日本欧美不卡| 蜜桃一区二区三区在线观看| 日韩激情综合| 精品国产精品久久一区免费式| 一本大道色婷婷在线| 美女亚洲一区| 亚洲一区欧美二区| 国产日韩一区| 日韩免费福利视频| 亚洲免费网址| 国产剧情在线观看一区| 日韩免费久久| 亚洲三级毛片| 97精品国产| 蜜桃久久av| 国产精品1区在线| 国产字幕视频一区二区| 婷婷综合电影| 久久精品主播| 国产日韩视频在线| 久久影视一区| 日韩精品第二页| 欧美精选视频一区二区| 亚洲精品日本| 美女av在线免费看| 婷婷精品在线| 99久久精品费精品国产| 日本aⅴ免费视频一区二区三区| 中文在线а√天堂| 日韩1区2区3区| 欧美午夜精彩| 久草精品视频| 亚洲精品乱码日韩| 欧美羞羞视频| 欧美精品三级在线| 欧美日韩国产探花| 嫩草伊人久久精品少妇av杨幂| 免费精品国产的网站免费观看| 国产精品视频一区二区三区四蜜臂 | 日韩午夜精品| 久久精品国产成人一区二区三区| 在线综合欧美| 久久久久久色| 蜜臀91精品国产高清在线观看| 日韩国产欧美在线播放| 国产亚洲一区二区手机在线观看| 欧美一区不卡| 蜜臀91精品一区二区三区| 韩国三级一区| 麻豆精品久久| 日韩av一区二| 蜜芽一区二区三区| 久久一区二区三区喷水| 国语精品一区| 久久99精品久久久久久园产越南| 免费人成网站在线观看欧美高清| 国产精品久久久久久久久久10秀| 奇米狠狠一区二区三区| 亚洲美洲欧洲综合国产一区| 国产一区二区亚洲| 日韩高清一区在线| 亚洲欧美日韩精品一区二区 | 999久久久亚洲| 国产精品nxnn| 青青草伊人久久| 亚洲欧美专区| 日韩中文字幕区一区有砖一区| 激情偷拍久久| 欧美福利专区| 91精品久久久久久久久久不卡| 国产精品.xx视频.xxtv| 日韩激情av在线| 亚洲人亚洲人色久| 综合五月婷婷| 亚洲免费专区| 日本精品另类| 国产视频一区二| 国产精品中文字幕亚洲欧美| 久久狠狠久久| 国产精品一区二区精品视频观看| 91国内精品| 久久国际精品| 欧美日韩一区二区三区不卡视频 | 国产亚洲精品美女久久| 视频精品一区| 一二三区精品| 日韩精品电影一区亚洲| 日韩va欧美va亚洲va久久| 日本亚洲视频| 日韩精品视频一区二区三区| 欧美亚洲综合视频| 91av一区| 成人台湾亚洲精品一区二区| sm久久捆绑调教精品一区| 久久电影tv| 女人av一区| 蜜桃视频在线观看一区| 日本亚洲最大的色成网站www| 日韩国产欧美在线播放| 国产欧美69| 麻豆理论在线观看| 欧美成人高清| 日韩专区在线视频| 日韩高清不卡一区| 九九99久久精品在免费线bt| 激情国产在线| 999久久久91| 免费日本视频一区| 国产精品亚洲欧美日韩一区在线| 精品亚洲免a| 99久久婷婷这里只有精品| 午夜一级在线看亚洲| 欧美精品三级在线| 91欧美国产| 亚洲综合日韩| 国产精区一区二区| 日韩精品欧美激情一区二区| 免费国产自线拍一欧美视频| 国产日韩中文在线中文字幕| 在线天堂中文资源最新版| 国产视频欧美| 国产欧美丝祙| 色婷婷精品视频| 亚洲精品无播放器在线播放| 精品久久福利| 亚洲深夜影院| 免费视频一区二区三区在线观看| 神马午夜久久| 国产日产一区| 免费不卡中文字幕在线| 国产精品主播| 国产精品美女| 成人在线免费观看网站| 国产美女精品| 精品日本视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品xvideos88| 99国产精品免费视频观看| 日韩高清国产一区在线| 日韩久久一区二区三区| 日本成人精品| 欧美1区2区3区| 国产精品任我爽爆在线播放| 婷婷精品视频| 久久伊人亚洲| 免费观看在线综合| 日韩国产网站| 国产精品久一| 亚洲欧美视频| 久久影院午夜精品| 欧美日韩夜夜| 激情久久久久久| 久久精品五月| 日韩av中文字幕一区二区| 亚洲大全视频| 欧美www视频在线观看| 日韩av中文在线观看| 激情综合激情| 色乱码一区二区三区网站| 日韩av二区在线播放| 91精品91| 日韩在线短视频| 美腿丝袜亚洲一区| 日韩精选在线| 亚洲中午字幕| 欧美日韩在线二区| 美女视频一区在线观看| 亚洲欧洲日韩精品在线| 免费成人网www| 欧美一级鲁丝片| 免费看久久久| 青青伊人久久| 日本成人手机在线| 亚洲另类视频| 丝袜美腿亚洲色图| 91精品久久久久久久久久不卡| 91欧美日韩| 国产精品99视频| 精品欠久久久中文字幕加勒比| 91福利精品在线观看| 亚洲区欧美区| 美女精品在线| 国产亚洲毛片在线| 99视频一区| 午夜在线精品| 视频一区二区三区中文字幕|