RxJS中的同步与异步序列

诱导素

我想关于同步和异步运算符和序列之间的区别,我有一个很基本的问题。

我们在程序中处理的所有内容都可以表示为一个序列。这意味着我可以同时拥有:

  • 数字数组作为序列。传统上,这是我要同步处理的事情,例如,使用reduce函数来计算总和或平均值。但是我需要知道所有元素才能进行计算。
  • 点击事件数组。它们异步出现(将来,我不知道它们何时到达。)

使用通用Observable数据类型,我可以对mergezip不同元素执行许多操作

RxJS的整体思想是异步处理序列,所以我的问题是-所有averagecountmaxminreduce等运算符的意义是什么,需要完成序列吗?如果我不能在序列中添加任何元素(将元素异步添加到数组-为什么不添加?)以便重新计算-为什么我应该在Array.prototype.reduce上使用RxJS?

换句话说-最初,我认为序列应该始终能够在其上执行运算符(运算符是什么),即使序列未完成也是如此

塞巴斯蒂安·塞巴尔德(Sebastian Sebald)

正如您已经说过的,Rx将帮助您处理异步事件。当然,reduce您也可以使用该Array方法。但是,您将必须(a)从新开始时进行新的计算,或者在新值到达时进行(b)存储累加值并对新值进行一次减少。

因此,如果您使用的是RxJS,它将基本上为您执行(b)。意思是,它将累积值存储在该.reduce方法创建的可观察值中每当有新值出现(来自生产者),它将再次应用该方法。

在情况下countmaxmin:他们实际上是过滤器的方法。当然,您可以使用临时值和某些Array方法来实现此目的但是,如果您已经尝试过此操作,则实现和处理异步事件确实很麻烦。您必须存储临时值,...

RxJS将为您抽象所有异步。您提到的运算符只是用于转换/过滤/ ...传入内容的大型工具包。我建议阅读Ben Lesh的这篇文章

RxJS的最大优势在于,尤其是在构建UI时,您永远都不知道“异步数组”(=事件)何时完成。因此,您必须执行(a)或(b),这确实很烦人。RxJS为您抽象了此行为,因此您可以处理实际的问题。

关于完成

我错过了您提出的关于序列需要完成的观点:

对于所有运营商而言并非如此。如果您订阅了Observable +运算符链,您将始终获得Observable产生当前(=最后)值。如果通过管道推送新值,则将更新当前值,并通知所有订户。

例子

这是一个非常简单的示例,在我看来,这表明为什么RxJS与“旧的处理方式”相比有如此大的改进:http ://jsbin.com/suqila/1/edit?js,output

在非RxJS中,您始终必须存储状态并在您的方法中引入副作用。使用RxJS,您可以消除副作用,使代码更容易推理。

同步与异步

在上面我提到的文章中,Ben Lesh说:

可观察对象通常是异步的。

他的意思是,您通常使用可观察变量来解决异步问题,自动完成是一个非常受欢迎的示例。很少您也可以使用同步Observable。Observable.of([1,2,3])例如是同步的。

起初这可能会造成混淆,但实际上并不重要。可观察对象是基于懒惰/推送的意思是,他们什么也不做,直到他们从生产者那里获得新的价值和/或某人订阅了它们(取决于它们是冷还是热)。但这取决于生产者,该过程是同步的还是异步的。

对于运营商来说也是如此。它们是接受源可观察的函数,并返回一个新的可观察对象,当您订阅源时,该新观察对象将订阅该源。就是这样。当通过操作员链推送新值时,它们将执行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

RxJS中的同步性

来自分类Dev

RxJS中的同步性

来自分类Dev

Tensorflow中的同步与异步计算

来自分类Dev

NodeJS中的异步Vs同步

来自分类Dev

NodeJS中的异步Vs同步

来自分类Dev

异步函数中的同步异常

来自分类Dev

Passport.js异步与同步反序列化

来自分类Dev

在Python中同步/异步插入或更新ElasticSearch

来自分类Dev

在Objective-C中同步异步任务

来自分类Dev

从同步方法中调用异步方法

来自分类Dev

异步代码中需要同步

来自分类Dev

从同步函数中调用异步函数

来自分类Dev

在异步功能中调用同步功能

来自分类Dev

在Dart中以同步方式运行异步代码

来自分类Dev

在异步C#中同步执行

来自分类Dev

什么是Android中的同步和异步?

来自分类Dev

在Xamarin Forms中的PCL中以同步方法调用异步函数

来自分类Dev

Scala中的同步和异步客户端代码

来自分类Dev

如何理解JMS中的“同步”和“异步”消息传递?

来自分类Dev

意图在android中是异步的。为什么不能同步呼叫?

来自分类Dev

如何在angularjs中调用同步和异步?

来自分类Dev

在GWT中,RPC调用是同步的还是异步的

来自分类Dev

基于异步/等待的Windows服务中的同步I / O

来自分类Dev

Node.js中的'console.time'是同步还是异步?

来自分类Dev

TCP套接字连接中同步与异步的优势

来自分类Dev

将异步扭曲代码集成到同步python代码中

来自分类Dev

.net 4.5中异步和同步之间的区别

来自分类Dev

如何从石英计划作业中同步调用异步方法

来自分类Dev

最近的iOS中同步和异步之间的区别