如题,最近拜读了ZAKAS的understanding ECMAScript6, 在迭代器和生成器章节,讲了很多迭代器的用法,和使用场景,大概总结下也就是两条
- 用于自定义的迭代逻辑,为for-of服务
- 利用yield实现异步操作
虽然书中讲的很棒,但不免有些疑惑
对于第一个场景,感觉默认迭代器已经能满足大部分迭代的需求,好像能用到*function的机会不多,如果只是为了适应某种特殊的循环逻辑而使用迭代器,感觉有些大材小用。
对于第二个场景,实现异步有很多方法啊,纯es6可以用promise,angular里可以用rxjs,那为什么还要用generator去实现异步呢。
而且还有一个非常关键的问题是,只有在输出代码是es6风格时,才允许使用*function,这也就意味着对无法识别es6语法的浏览器会完全不兼容。
这样总的看下来,迭代器不就处于一种上下都不沾的尴尬场景,不知道大家在实际项目工作中,是如何使用迭代器的,又是如何解决兼容性问题的呢
生成器并不是实现异步操作而是可以改造异步为同步
可以看一下
co
函数的源码几十行利用
Generator
将promise
异步操作改成同步,实现async await
的效果