Node.js现在具有生成器。
我的理解是,可以使用生成器来编写看起来更线性的代码,并避免回调地狱和厄运样式编码的金字塔。
因此,到目前为止,我的理解是,在生成器内部,代码将执行直到达到“ yield”语句为止。此时,生成器功能的执行将中止。该yield语句指定一个返回值,该值可以是一个函数。通常,这将是一个阻塞的I / O功能- 通常需要异步执行的功能。
yield
yield的返回函数将返回到任何称为生成器的函数。
我的问题是,此时会发生什么?究竟是什么执行收益率返回的阻塞I / O功能?
编写看起来是线性的生成器/ yield代码是否正确,是否需要一种特定类型的函数来调用生成器,该函数循环遍历生成器并执行yield所返回的每个asynch函数并返回返回函数的结果返回到生成器?
我仍然不清楚究竟如何执行yield所返回的asynch函数。如果它是由调用生成器的函数执行的,那么它是否异步执行?我猜是这样,因为否则会导致阻塞行为。
总结我的问题:
任何人都可以对整个过程如何进行更好的概述/总结吗?
使用生成器编写异步代码时,您要处理两种类型的函数:
function
node-fibers
function*
next
有几个实现 伴随功能的 库。在大多数这些库中,伴随函数function*一次只能处理一个,因此您必须function*在代码中的每一个周围都包装一个包装。星系库(我写的)有点特殊,因为它可以处理没有中间包装的function*其他调用function*。伴随函数有点棘手,因为它必须处理一堆生成器。
执行流程可能很难理解,因为yield/next您function*和伴侣函数之间的舞蹈很少。理解流程的一种方法是用您选择的库编写一个示例,console.log在代码和库中添加语句,然后运行它。
yield/next
console.log