请求无扩展(RX)的清澈,风景如画的解释?(Requesting a clear, pictures

2019-08-17 02:58发布

现在很长一段时间,我试图总结我的周围RX头。 而且,是真的,我从来不知道我得到了它 - 或者不是。

今天,我发现了一个解释http://reactive-extensions.github.com/RxJS/其中-在我看来-是可怕的。 它说:

RxJS是事件的承诺是异步。

大。 这是一个充满复杂性,如果你没有什么RX左右,那句话后,你很像以前一样愚蠢丝毫的想法的句子。

这基本上是我的问题:所有在平时的地方,你找到关于RX的解释作出的(至少我)觉得愚蠢。 他们解释RX作为一个高度复杂的概念,有很多非常复杂的词汇和术语和任何,我从来没有完全确定它是什么。

所以我的问题是:你会如何解释RX的人谁是五岁? 我想它是什么明确的,风景如画的解释,什么是好,什么它的主要概念?

Answer 1:

所以,LINQ(在JavaScript中,这些都是高层次的阵列的方法,如mapfilterreduce ,等等-如果你不是一个C#开发,只需更换,每当我提到“LINQ”)给你一堆工具,你可以适用于序列 (在粗意义上的“列表”),以过滤和转换输入到输出(又名“的列表,它实际上是对我有意思”)。 但是,什么是一个列表?

什么是一个列表?

列表,是一些元素 ,以特定的顺序 。 我可以采取任何列表并将其转换成与LINQ 更好的列表。

(不一定的排序顺序,但订单)。

事件是一个List

但是关于事件是什么? 让我们来订阅事件:

OnKeyUp += (o,e) => Console.WriteLine(e.Key)
>>> 'H'
>>> 'e'
>>> 'l'
>>> 'l'
>>> 'o'

嗯。 这看起来有些东西 ,在一个特定的顺序 。 现在突然破晓在你身上, 列表和事件是一样的!

如果列表和活动都是一样的....

......那么为什么我不能转换和过滤输入事件更多有趣的活动这就是RX是什么 。 它带你了解与序列处理,包括所有的LINQ运营商如选择和地点和骨料的一切,并将其应用到的事件。

十分简单。

回调是一个序列太

是不是回调只是基本上只发生一次事件? 是不是它基本上就像一个项目的列表? 原来它是和大约的Rx有趣的事情之一是,它让我们把具有相同的语言(即我们可以将二者结合起来,或等待甲醚或其他事件和回调(之类的东西地理位置请求),等等等等)。



Answer 2:

随着保罗的出色答卷,我想补充拉VS推送数据的概念。

管道

让我们在会产生一系列的数字,并输出结果的一些代码的例子。 如果你认为这是一个尽头的小河你有一个producer是为您创造新的号码,并在另一端你有一个consumer是在做与这些数字的东西。

拉 - 素数表

比方说,在producer中生成素数的列表。 通常你会有些功能产生号码列表,每一次它返回它会已经通过管道计算到下一个值推consumer ,这将输出数字到屏幕上。

总理发电机---> Console.WriteLine

在这种情况下,很容易看出, producer正在做的大部分工作,而consumer会围坐在等待producer发送下一个值。 该consumer拉动管道,等待producer返回下一个值。

推 - 从一个快速的过程进展%的事件(无)

好吧,让我们说你有正在处理百万个的函数。 每个项目需要毫秒的过程,然后将函数产生出它在多大程度上得到的百分比值。 所以很多进步的价值观,速度非常快。

在管道的另一端你有一个进度条。 现在,如果进度条是处理每一个更新的用户界面会阻止试图跟上值流。

1百万物品处理器--->进度条

在这种情况下的数据通过管道被推动 producer ,然后将consumer被阻塞,因为数据太多被推它来处理。

反应允许你把延误,窗口,或取决于你希望如何采样管线consume的数据。 在这种情况下,我将采样数据更新进度栏前每秒。

列出与事件

因此,列表和事件是有点相同。 所不同的是数据是否被拉动或通过系统推进 。 随着列表中的数据被上 。 随着事件的数据



文章来源: Requesting a clear, picturesque explanation of Reactive Extensions (RX)?