Observable产生数据,应该给开发者提供足够的自由来对这些数据进行各种处理,比如map/transform等等。这就是Rxjs运算符发挥作用的地方。运算符是对Observables进行操作并返回Observables的函数。这允许我们链接这些操作符。链中的每个操作符都会修改前一个操作符操作产生的Observable。链中的操作符不会同时工作,而是顺序工作,每个操作符都在链中前一个操作符生成的Observable上工作。订阅是使用subscribe运算符完成的。subscribe运算符允许观察者连接到Observables。要从Observable获取数据或错误,Observer必须首先订阅该Observable。Rxjs中的运算符可以分为两类。1.可以添加到管道链操作的操作符可管道操作符是可以链接在一起的操作符。这些是纯函数,将可观察值作为输入并提供可观察值作为输出。伪代码如下:observeable.pipe(operator1(),operator2(),operator3(),operator3(),)operator1将接收可观察对象,对其执行操作并发出可观察对象。从operator1发出的observable作为输入传递给operator2(以此类推通过其余的运算符)。filter、mergeMap和forkJoin是可管道运算符的一些示例。2.CreationalOperatorCreationaloperators是创建新Observables的独立函数。最典型的创建操作符是of:import{of}from'rxjs';constobservable=of(1,2,3);变量observable是Observable类型的实例,它发出1、2和3(按顺序)。create、of和from是创建运算符的典型示例。热和冷Observables之间的区别代码Observables不会开始发射值,直到观察者订阅它。相比之下,HotObservable可以随时开始发射值,订阅者可以随时开始观察发射的值。但是,订阅者可能会错过订阅时间之前发出的任何值。看一个例子:import{Observable}from'rxjs';constobservable=Observable.create((observer:any)=>{observer.next('HelloWorld!');});observable.subscribe((message)=>console.log(消息));//你好世界!这个Observable发出的值是HelloWorld。它将调用订阅者的next方法来发出。Observable.create的入参是一个subscriber订阅者。这是一个函数,函数的入参是Observer,类型是any。函数体是下一个执行输入参数的方法。Observable的构造函数非常简单。将create传入的函数设置为Observable的内部属性_subscribe:然后调用subscribe方法订阅Observable.create返回的Observable实例。订阅者的逻辑是通过subscribe方法传入的,是一个函数:toSubscriber方法会创建一个subscriber订阅者实例:在订阅者的构造函数中,只是简单的给destination字段赋值:这里传入的应用逻辑通过subscribe函数赋值给safeSubscriber的_next属性:然后执行_subscribe方法:这个_subscribe方法是subscribe函数调用的第一步,它将subscribe传入的应用逻辑赋值给_subscribe属性的函数。注意subscribe函数调用会先触发Observable的emit值:this._next触发destination.next:这里调用的是SafeSubscriber的_next属性指向的方法,也就是subscribe传入的函数实现:求和起来,Observable.create和Observable。subscribe调用将首先触发Observable实例调用next方法来发出调用创建操作符时指定要发出的值。然后它将触发应用程序开发人员传入订阅调用的业务逻辑以使用发出的值。这段代码的执行顺序如下:
