Duk*_*gal 17 yield generator node.js
Node.js现在有了生成器.
我的理解是,生成器可用于编写看起来更加线性的代码,并避免回调地狱和厄运风格编码的金字塔.
所以到目前为止,我的理解是在生成器内部,代码执行直到达到"yield"语句.此时暂停执行生成器功能.该yield语句指定一个返回值,该值可以是一个函数.通常,这将是一个阻塞I/O函数 - 通常需要异步执行的函数.
yield的返回函数返回到任何称为生成器的函数.
我的问题是,此时会发生什么?究竟是什么执行了yield返回的阻塞I/O函数?
编写看似线性的生成器/良品代码是正确的,需要有一种特定类型的函数来调用生成器,这是一个循环生成器并执行yield返回的每个异步函数的函数并返回异步功能返回发电机的结果?
我仍然不清楚如何执行yield返回的asynch函数.如果它由调用生成器的函数执行,它是否异步执行?我猜是因为否则会导致阻塞行为.
总结一下我的问题:
任何人都可以提供更好的概述/总结整个过程的工作原理吗?
Bru*_*ier 12
使用生成器编写异步代码时,您将处理两种类型的函数:
function.这些功能无法屈服.您无法与它们以同步方式编写异步代码,因为它们会一直运行完成; 您只能通过回调处理异步完成(除非您调用额外的功能,如node-fibers库或代码转换).function*.这些功能可以产生.您可以在其中编写同步样式的异步代码,因为它们可以产生.但是,你需要创建该生成器的伴侣功能,处理回调和恢复产生了next每一次回调火灾通话.有几个库实现了伴随功能.在大多数这些库中,伴随函数一次处理一个function*,您必须function*在代码中的每个库中放置一个包装器.Galaxy库(我写的)有点特别,因为它可以处理function*调用其他function*没有中间包装器.伴侣功能有点棘手,因为它必须处理一堆发生器.
由于yield/next您function*和伴侣功能之间的舞蹈很少,执行流程可能难以理解.理解流程的一种方法是使用您选择的库编写示例,console.log在代码和库中添加语句,然后运行它.
| 归档时间: |
|
| 查看次数: |
14102 次 |
| 最近记录: |