什么是RxJS?

RxJS字面意思就是:JavaScript的响应式扩展(Reactive Extensions for JavaScript)。

RxJS是一个利用可观察(observable)序列和LINQ查询操作符来处理异步以及基于事件程序的一个库。通过RxJS, 开发人员用Observables表示 异步数据流,用LINQ运算符查询 异步数据流,并使用Schedulers参数化 异步数据流中的并发。简而言之,Rx = Observables + LINQ + Schedulers。

无论你在用 Node.js编写一个web端应用还是服务端应用,你都必须经常处理异步和基于事件的编程。Web应用程序和Node.js应用程序都会碰到I / O操作和计算耗时的任务,这些任务可能需要很长时间才能完成,并可能会阻塞主线程。而且,处理异常,取消和同步也很麻烦,并且容易出错。

使用RxJS,你可以用Observer 对象来表示多个异步数据流 (那些来自多个数据源的,比如,股票报价,微博,计算机事件, 网络服务请求,等等。),还可以用Observer 对象订阅事件流。无论事件何时触发,Observable 对象都会通知订阅它的 Observer对象。

因为可观察序列是数据流,你可以用Observable的扩展方法实现的标准查询运算符来查询它们。从而,你可以使用这些标准查询运算符轻松筛选,投影(project),聚合,撰写和执行基于时间轴(time-based)的多个事件的操作。此外,还有一些其他反应流特定的操作符允许强大的查询写入。 通过使用Rx提供的扩展方法,还可以正常处理取消,异常和同步。

RxJS可与诸如数组,集合和映射之类的同步数据流以及诸如Promises之类的单值异步计算进行互补和顺畅的互操作,如下图所示:

单返回值 多返回值
Pull/Synchronous/Interactive Object Iterables (Array / Set / Map / Object)
Push/Asynchronous/Reactive Promise Observable

推送模式 vs 拉取模式

在交互式编程中,应用程序为了获取更多信息会主动遍历一个数据源,通过检索一个代表数据源的序列。这种行为就像是JavaScript数组,对象,集合,映射等的迭代器模式。在交互式编程中,必须通过数组中的索引或通过ES6 iterators来获取下一项。

在拉取模式中,应用程序在数据检索过程中处于活动状态: 它通过自己主动调用next来决定检索的速度。 此枚举模式是同步的,这意味着在轮询数据源时可能会阻止您的应用程序的主线程。 这种拉取模式好比是你在图书馆翻阅一本书。 你阅读完成这本书后,你才能去读另一本。

另一方面在响应式编程中,应用程序通过订阅数据流获得更多的信息 (在RxJS中称为可观测序列),数据源的任何更新都传递给可观测序列。这种模式下应用是被动接收数据:除了订阅可观察的来源,并不会主动查询来源,而只是对推送给它的数据作出反应。事件完成后,信息来源将向用户发送通知。这样,您的应用程序将不会被等待源更新阻止。

这是RxJS采用的推送模式。 这好比是加入一个图书俱乐部,在这个图书俱乐部中你注册了某个特定类型的兴趣组,而符合你兴趣的书籍在发布时会自动发送给你。 而不需要排队去搜索获取你想要的书籍。 在重UI应用中,使用推送数据模式尤其有用,在程序等待某些事件时,UI线程不会被阻塞,这使得在具有异步要求的JavaScript运行环境中非常重要。 总之,利用RxJS,可使应用程序更具响应性。

Observable / Observer的可观察模式就是Rx实现的推送模型。 Observable对象会自动通知所有观察者状态变化。 请使用Observablesubscribe方法来订阅,subscribe方法需要Observer对象并返回Disposable对象。 这使您能够跟踪您的订阅,并能够处理订阅。 您可以将可观察序列(如一系列的鼠标悬停事件)视为普通的集合。 RxJS对可观察序列的内置实现的查询,允许开发人员在基于推送序列(如事件,回调,Promise,HTML5地理定位API等等)上组合复杂的事件处理。有关这两个接口的更多信息,请参阅探索 RxJS的主要概念

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • RxJS可以解决的问题 我们知道传统的for,while对循环体中的异步程序是无法感知的,或者说,它们不会等待异步...
    du1dume阅读 5,116评论 5 39
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,286评论 19 139
  • 本篇文章介主要绍RxJava中操作符是以函数作为基本单位,与响应式编程作为结合使用的,对什么是操作、操作符都有哪些...
    嘎啦果安卓兽阅读 2,927评论 0 10
  • 介绍 RxJS是一个异步编程的库,同时它通过observable序列来实现基于事件的编程。它提供了一个核心的类型:...
    泓荥阅读 16,685评论 0 12
  • 一.背景介绍 Rx(Reactive Extension -- 响应式扩展 http://reactivex.io...
    爱上Shu的小刺猬阅读 2,119评论 1 3