鍍金池/ 問(wèn)答/HTML/ es6迭代器和生成器的使用場(chǎng)景

es6迭代器和生成器的使用場(chǎng)景

如題,最近拜讀了ZAKAS的understanding ECMAScript6, 在迭代器和生成器章節(jié),講了很多迭代器的用法,和使用場(chǎng)景,大概總結(jié)下也就是兩條

  1. 用于自定義的迭代邏輯,為for-of服務(wù)
  2. 利用yield實(shí)現(xiàn)異步操作

雖然書中講的很棒,但不免有些疑惑

對(duì)于第一個(gè)場(chǎng)景,感覺(jué)默認(rèn)迭代器已經(jīng)能滿足大部分迭代的需求,好像能用到*function的機(jī)會(huì)不多,如果只是為了適應(yīng)某種特殊的循環(huán)邏輯而使用迭代器,感覺(jué)有些大材小用。

對(duì)于第二個(gè)場(chǎng)景,實(shí)現(xiàn)異步有很多方法啊,純es6可以用promise,angular里可以用rxjs,那為什么還要用generator去實(shí)現(xiàn)異步呢。

而且還有一個(gè)非常關(guān)鍵的問(wèn)題是,只有在輸出代碼是es6風(fēng)格時(shí),才允許使用*function,這也就意味著對(duì)無(wú)法識(shí)別es6語(yǔ)法的瀏覽器會(huì)完全不兼容。

這樣總的看下來(lái),迭代器不就處于一種上下都不沾的尷尬場(chǎng)景,不知道大家在實(shí)際項(xiàng)目工作中,是如何使用迭代器的,又是如何解決兼容性問(wèn)題的呢

回答
編輯回答
神曲

生成器并不是實(shí)現(xiàn)異步操作而是可以改造異步為同步
可以看一下co函數(shù)的源碼幾十行
利用Generatorpromise異步操作改成同步,實(shí)現(xiàn)async await的效果

2018年5月5日 23:43