當前位置:
首頁 > 最新 > js-generator基礎

js-generator基礎

js-generator基礎(第四周)

看了幾個小時generator相關文章,發現裡面東西太多,這周想放棄寫這篇,轉寫其他方面的,上次就用了這招,不過沒有沒有找到其他可寫的,最後決定寫一篇相當基礎的generator


generator是什麼

generator也是為了解決地獄回調問題的,和上周的promise一樣都是為了實現非同步編程,本質還是各種回調;

在某些時候也可以認為generator為es6中新定義的數據類型,這種數據類型和函數很像,每個函數只能返回一個結果,即只能return一次,如果在某些函數中沒有看到return,其實質在函數結尾是存在一個隱藏的return undefined 的,而generator不同,可以返回多次

通過協程方式,協程就是多個線程相互協作,完成非同步任務,如下圖:


generator用function*,比普通函數多出一個「 * 」,generator除了return語句外,可以用yield返回多次,也可以看成generator遇到yield是就返回一個值,並且generator暫停在這,當需要繼續執行是只用調用generator.next()就可以繼續執行,遇到yield又會暫停,再調用generator.next()後繼續執行……

function*gen(){yield1;yield2;yield3;yield4;yield5;return"結束";}letg=gen();leti=;letst=setInterval(()=>{//每間隔500ms執行一次g.next(),執行7次,並在控制台列印i++;console.log(g.next());if(i>7){clearInterval(st);}},500);

結果:

GIF

可以看出generator 遇到yleld就會暫停,只有當調用generator.next()才會向下執行,調用這個方法會返回,這個對象中value是yield的返回值,done表示generator是否執行結束,只有當執行到return時,這個對象中的done才會變成true,說明執行結束;如果仍然執行的話,如上圖後兩條,執行到done為true時就不要執行了

20180816

發揮不廣泛

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 發揮不廣泛 的精彩文章:

TAG:發揮不廣泛 |