gpt4 book ai didi

node.js - 试图理解 node.js 中的生成器/产量 - 什么执行异步函数?

转载 作者:IT老高 更新时间:2023-10-28 23:01:28 27 4
gpt4 key购买 nike

Node.js 现在有生成器。

我的理解是,生成器可用于编写看起来更加线性的代码,并避免回调 hell 和末日风格编码的金字塔。

所以到目前为止,我的理解是,在生成器内部,代码会一直执行,直到它到达“yield”语句。生成器函数的执行此时暂停。 yield 语句指定可能是函数的返回值。通常这将是一个阻塞 I/O 函数 - 通常需要异步执行。

yield 的返回函数返回到任何称为生成器的地方。

我的问题是,此时会发生什么?究竟是什么执行了 yield 返回的阻塞 I/O 函数?

编写看起来是线性的生成器/ yield 代码是否正确,需要有一种特定类型的函数来调用生成器,一个循环通过生成器并执行 yield 返回的每个异步函数的函数并将异步函数的结果返回到生成器中?

我仍然不清楚 yield 返回的异步函数是如何执行的。如果是由调用生成器的函数执行的,是异步执行的吗?我猜是因为否则会导致阻塞行为。

总结一下我的问题:

  1. 要使用生成器编写“线性”异步代码,是否需要有一个调用函数来迭代生成器,将产生的函数作为回调执行并将回调的结果返回到生成器?
  2. 如果问题 1 的答案是肯定的,那么产生的函数究竟是如何异步执行的?

谁能更好地概述/总结整个过程的工作原理?

最佳答案

使用生成器编写异步代码时,您会处理两种类型的函数:

  • 普通函数用function声明。这些函数不能产生。你不能以同步的方式编写异步代码,因为它们会运行到完成;您只能通过回调处理异步完成(除非您调用额外的功能,如 node-fibers 库或代码转换)。
  • generator 函数用 function* 声明。这些函数可以产生。您可以在其中以同步样式编写异步代码,因为它们可以产生。但是您需要一个伴随函数来创建生成器、处理回调并在每次触发回调时使用 next 调用来恢复 generator

有几个库实现了伴随函数。在大多数这些库中,伴随函数一次处理一个 function* 并且您必须在代码中的每个 function* 周围放置一个包装器。星系库(我写的)有点特别,因为它可以处理 function* 调用其他 function* 而无需中间包装器。伴随函数有点棘手,因为它必须处理一堆生成器。

执行流程可能难以理解,因为您的 function* 和伴随函数之间的 yield/next 舞蹈很小。理解流程的一种方法是使用您选择的库编写一个示例,在您的代码和库中添加 console.log 语句,然后运行它。

关于node.js - 试图理解 node.js 中的生成器/产量 - 什么执行异步函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17516952/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com