RxJS操作符——数据流的过滤
上文中我们学习了数据流的各种创建方法,从这篇文章开始着重介绍对数据流的各种转化操作,首先从过滤系列操作说起。可能对于某个数据流,我们根据业务场景不同需要从中挑选出合适的数据,类似于数组的 filter,RxJS中也提供了一系列的方法供我们快捷过滤。
上文中我们学习了数据流的各种创建方法,从这篇文章开始着重介绍对数据流的各种转化操作,首先从过滤系列操作说起。可能对于某个数据流,我们根据业务场景不同需要从中挑选出合适的数据,类似于数组的 filter,RxJS中也提供了一系列的方法供我们快捷过滤。
有时候我们需要的数据可能来自不同的数据流,但从多条数据流里分别取数据又比较难操作,所以RxJS为我们提供了一类将不同数据流结合到一条数据流的方法。
了解了RxJS中的关键概念后,就需要去掌握各种各样的操作数据流的操作符了。这篇文章从最初的操作符开始分析——创建相关。
Observable并不生产数据,其本质是数据生产者和消费者之间的桥梁,数据生产者可以是向observer.next(value)传递的任意值。冷模式与热模式的区别关键就在于生产者的激活时期。
之前我们谈到了类似数组方法的filter的过滤处理,是将符合需求的数据筛出的操作。同理,现在谈到的数据流映射也和数组方法的map函数类似,这类操作不对数据进行筛选,而是对数据流中的所有数据执行一个规定的映射函数将其变为我们需要的数据流。
RxJS的订阅行为是同步的,但数据的流动逻辑既可以同步也可以异步。这样就造成了一个问题,当数据的流动和组合逻辑变得复杂时,尤其是同步和异步数据混合后,整体状态会变得难以控制。为了解决这个问题,Scheduler则应运而生。
有时候获取到数据流之后,内部数据虽然都是需要的,但数据的形式或许不是我们想要的。这种时候就需要使用这些数据再去进一步加工得到想要的数据。这就是今天要谈到的这一类操作符了。
现在我们已经了解Observable和Observer了,数据来自于Observable,流入Observer对数据处理,这样单点对单点的处理方式很简洁,但似乎有些过于单一。有时候我们希望同一份数据能在多个地方被用到,这就是数据流的桥梁——Subject发挥作用的地方了。Subject既可以用作Observer,也可以用作Observable。
前面我们谈到一个数据流的生命周期分为创建,订阅,执行,完成四个部分。在创建时,我们传入了一个订阅函数作为订阅时数据流出的逻辑。这一节我们就来具体谈谈执行订阅逻辑时涉及到的概念——Observer和Subscription。
最近需要在工作项目中使用RxJS,稍微查了查资料感觉还是个很有意思的东西,于是从今天开始集中主要精力学学RxJS啦。由于其核心思想和常规的JS写法有较大不同,在逐步分析其概念之前先谈谈相关背景知识。