当前位置: 首页 > 网络应用技术

不要使用发电机模拟异步,它仍然具有很酷的用法

时间:2023-03-07 14:29:10 网络应用技术

  我发现有人在某个技术组中讨论JavaScript的生成器。许多人提到发电机将与异步相关。我认为这是一种深刻的误解。

  发电机与异步之间的关系是什么?由CO代表的一批早期框架使用它来模拟异步/等待,但是这种表明生成器与异步有关吗?我认为答案是否的。CO中使用了许多语言特征,如果功能,变量...和生成器只是其中之一。

  发电机确实是模拟异步/等待的关键语言特征。但是,正确的因果关系是生成器和异步/等待JS的基础设施:该功能暂停并保留了当时的执行环境。

  在我的概念中,发电机的应用程序前景比异步/等待。产物代表“无限序列”的抽象,或者长序列的抽象,这种抽象可以为我们带来编程思想的突破。

  在非常前卫 - garde功能语言的官方网站的主页上,有这样的代码:

  这是为Haskell程序员感到自豪的代码。它的作用是生成定性数序列。在大多数语言中,很难重新制定这种逻辑结构。在它们中,最关键的点是它应用了延迟计算和无限列表的概念。

  我们尝试分析此Haskell代码的逻辑,表明整数序列从2到无限开始。FilterPrime是一个过滤此整数序列的函数,该函数的功能由后者指定。因此,可以将整数序列转换为质量数序列的密钥代码是FelterPrime,那么它到底是什么?

  此代码很短。首先,让我们看一下参数部分。P:XS是解构和分配的形式参数。它表明输入列表中的第一个元素分配给p,其余部分,并且值为xs。

  第一次调用FilterPrime。目前,P的值为2,而XS是无尽的列表。

  那么,FilterPrime Filter P和XS如何列入质量数字列表?让我们看一下此代码:

  可以用适合JS程序员理解的伪代码来解释这种近似含义:

  它是P的倍数。从列表xs.of课程中,XS不是JavaScript的本机数组,因此它没有方便的过滤器方法。

  然后,接下来,此过滤器数组将传递给FilterPrime递归。这很有趣。目前,P的多个在X中过滤掉了。Filter的第一个元素的倍数,您可以继续找到下一个质量。

  最后,代码指示列表中P的第一个。

  因此,在JavaScript中,我可以重新阐述此类编程想法吗?

  答案当然是,关键是生成器。

  首先,我们要解决的问题是这是一个无尽的列表。JavaScript不支持无数列表,但是我们可以使用Generator表示代码如下:

  接下来,阵列的过滤器不能在无尽的列表上表现良好,因此我们需要无尽列表的过滤器功能。代码如下:

  最后,只要您阅读Haskell,我们的精彩效果弹片就不困难,实现代码如下:

  代码是编写的,我们可以在JavaScript中使用唯一的异步能力来输出此质量序列:

  好吧,尽管语法噪声有点有点,但到目前为止,我们已经达到了与Haskell相同的质量序列算法。

  除了无尽的列表外,生成器还适合包装一些API来表达“不规则列表”的概念。例如,我们可以在正则表达式中制作某些EXEC包,以使其成为生成器。

  使用时,我们可以用于...结构。以下代码显示一个简单的单词分析写作。

  这种API设计比原始设计更简洁和美丽吗?

  您会发现发电机是如此巨大潜力的语言特征。它为Javascripter打开了“无尽”数学概念的大门。因此,不要考虑使用它来模拟异步。我希望阅读这篇文章。您可以获得一点灵感。使用发电机在生产中设计开源项目或API。谢谢您的观看。