小鄭搞碼事:生成器(Generator)雖好理解,但需要注意一個問題

點擊右上方紅色按鈕關注“小鄭搞碼事”,每天都能學到知識,搞懂一個問題!

上一篇我給大家介紹過一個迭代器(interator)的東西。迭代器和生成器的流程是有點類似的。區別在於, 生成器(Generator)不是針對對象上內容的遍歷控制,而是針對函數代碼塊執行控制。所以理解起來並不困難。

一、生成器(Generator)的實現

如果將一個特殊函數的代碼使用yield關鍵字來分割成多個不同的代碼段,那麼每次Generator調用next()都只會執行yield關鍵字之間的一段代碼。

可以認為生成器就是一個可中斷執行的特殊函數。

看一下實例:

小鄭搞碼事:生成器(Generator)雖好理解,但需要注意一個問題

這段代碼輸出結果是:

小鄭搞碼事:生成器(Generator)雖好理解,但需要注意一個問題

仔細看看代碼, 每每調用next()後輸出結果。輸出結果value值依次會是1,2,3,4,5

二、需要注意一點

生成器(Generator)遇到yield關鍵字會暫停往後執行,但並不表示後面的程序就不執行了。比如我把上面那段代碼改一下。

小鄭搞碼事:生成器(Generator)雖好理解,但需要注意一個問題

看一下輸出結果:

小鄭搞碼事:生成器(Generator)雖好理解,但需要注意一個問題

結果發現先輸出"完成了",然後才打印數字。

總結:

明後了生成器是如何動作的,我們就可以用它來控制多個異步操作了,尤其對於Node服務器處理瀏覽器的請求,這樣來處理異步顯得更為優雅。


分享到:


相關文章: