基础
jQuery
Promise
Generator
- ES6 中的 Generator
- Iterator 遍历器
- Generator 的具体应用
- Thunk 函数
- Generator 与异步操作
- koa 中使用 Generator
- Generator 的本质是什么?是否取代了 callback
Async/Await
总结
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
Generator 的本质是什么?是否取代了 callback
其实标题中的问题,是一个伪命题,因为Generator
和callback
根本没有任何关系,只是我们通过一些方式(而且是很复杂的方式)强行将他俩产生了关系,才会有现在的Generator
处理异步。
本节内容概述
Generator
的本质- 和
callback
的结合
Generator
的本质
介绍Generator
的第一节中,多次提到 暂停 这个词 ———— “暂停”才是Generator
的本质 ———— 只有Generator
能让一段程序执行到指定的位置先暂停,然后再启动,再暂停,再启动。
而这个 暂停 就很容易让它和异步操作产生联系,因为我们在处理异步操作时,即需要一种“开始读取文件,然后暂停一下,等着文件读取完了,再干嘛干嘛...”这样的需求。因此将Generator
和异步操作联系在一起,并且产生一些比较简明的解决方案,这是顺其自然的事儿,大家要想明白这个道理。
不过,JS 还是 JS,单线程还是单线程,异步还是异步,callback
还是callback
。这一切都不会因为有一个Generator
而有任何变化。
和callback
的结合
之前在介绍Promise
的最后,拿Promise
和callback
做过一些比较,最后发现Promise
其实是利用了callback
才能实现的。而这里,Generator
也必须利用callback
才能实现。
拿介绍co
时的代码举例(代码如下),如果yield
后面用的是thunk
函数,那么thunk
函数需要的就是一个callback
参数。如果yield
后面用的是Promise
对象,Promise
和callback
的联系之前已经介绍过了。
co(function* () {
const r1 = yield readFilePromise('some1.json')
console.log(r1) // 打印第 1 个文件内容
const r2 = yield readFileThunk('some2.json')
console.log(r2) // 打印第 2 个文件内容
})
因此,Generator
离不开callback
,Promise
离不开callback
,异步也离不开callback
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论