简介
Observable 是一个 JavaScript 库,它提供了对观察者模式的支持。使用 Observable 可以轻松创建可观察对象(Observables),这些对象可以发送一系列数据并在接收者之间传递。
NPM 包 Observable 为我们提供了丰富的 API 接口,方便我们创建、组合和变换 Observables。本文将详细介绍 Observable 的使用方法,并提供示例代码。
安装
使用 npm 进行安装:
npm install --save rxjs
创建 Observable
我们可以使用 Observable.create()
方法来手动创建一个 Observable。该方法需要传入一个函数作为参数,这个函数用于定义如何发送数据。
下面是一个简单的示例代码:
import { Observable } from 'rxjs'; const observable = Observable.create(observer => { observer.next('Hello'); observer.next('World'); observer.complete(); });
在上面的代码中,我们通过 Observable.create()
方法创建了一个 Observable,并使用 observer.next()
方法发送两个字符串数据。最后,我们使用 observer.complete()
声明 Observable 发送数据的结束。
订阅 Observable
一旦创建了 Observable,我们就可以使用 subscribe()
方法来订阅它。subscribe()
方法接受三个回调函数作为参数:next
、error
和 complete
,分别表示接收到新数据、出现错误,以及数据发送完毕时需要执行的操作。
下面是一个简单的示例代码:
observable.subscribe( data => console.log(data), error => console.error(error), () => console.log('complete') );
在上面的代码中,我们使用 subscribe()
方法订阅了 observable
,并定义了三个回调函数分别输出接收到的数据、错误信息和完成信息。
操作符
Observable 提供了一些操作符来方便我们对 Observables 进行变换和组合。下面是几个常用的操作符:
map
map()
操作符可以将 Observable 发射的每个数据项都映射成另外一个数据项,然后返回一个新的 Observable。
下面是一个简单的示例代码:
-- -------------------- ---- ------- ------ - ---------- - ---- ------- ------ - --- - ---- ----------------- ----- ---------- - -------------------------- -- - ----------------- ----------------- -------------------- --- ---------------- --------- -- ----- - -- ------------ ---- -- ------------------ ----- -- --------------------- -- -- ----------------------- --
在上面的代码中,我们使用 pipe()
方法添加了一个 map()
操作符,将 Observable 输出的每个数据项乘以 2。
filter
filter()
操作符可以选择 Observable 输出的数据项,返回一个新的 Observable。
下面是一个简单的示例代码:
-- -------------------- ---- ------- ------ - ---------- - ---- ------- ------ - ------ - ---- ----------------- ----- ---------- - -------------------------- -- - ----------------- ----------------- ----------------- -------------------- --- ---------------- ------------ -- ----- - -- ------------ ---- -- ------------------ ----- -- --------------------- -- -- ----------------------- --
在上面的代码中,我们使用 pipe()
方法添加了一个 filter()
操作符,选择 Observable 输出的值大于 1 的数据项。
mergeMap
mergeMap()
操作符可以将 Observable 发射的每个数据项转换成一个新的 Observable,并将这些 Observables 合并为一个输出的 Observable。
下面是一个简单的示例代码:
-- -------------------- ---- ------- ------ - ----------- -- - ---- ------- ------ - -------- - ---- ----------------- ----- ---------- - -------------------------- -- - ----------------- ----------------- ----------------- -------------------- --- ---------------- -------------- -- ---------- ----------- ------------ ---- -- ------------------ ----- -- --------------------- -- -- ----------------------- - ----------------------------------------------------------- -------- ----------------------------------------------------------------------------------