博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
rxjs一句话描述一个操作符(1)
阅读量:5037 次
发布时间:2019-06-12

本文共 2213 字,大约阅读时间需要 7 分钟。

之前一直在写LINQ之类的东西,对于函数式的面向对象还是有一些功底,所以对于rxjs,感觉上不是很难,但是每次看完过几天就忘,还是记一下笔记吧,好记性不如烂笔头真不是盖的。

首先介绍几个重要的概念。

可以通过这个URL来详细了解相关知识:https://www.jianshu.com/p/f2f87925b229

rxjs中有几个重要的概念,有Observable、Observer、Subject,他们参考了观察者模式(或者叫发布/订阅模式)和迭代器模式。rxjs中有一个数据流的概念,和LINQ很类似,可以想象有一根管道,数据缓缓从管道中流过。发送数据的角色是生产者,消费数据的角色是观察者,观察者要想消费数据的话得知道生产者什么时候发送数据,也就是说,观察者要从生产者订阅一下通知,以便及时消费数据,这个过程就是由Observable来完成的。

Observable

Observevable是一个对象,如果要创建一个Observable,可以从如下两个例子来看:

const observable$ = new Observable
(observer => { observer.next(1); observer.next(2); observer.next(3); observer.next(4); return { unsubscribe: () => { console.log('complete'); } }; }); const subscription = observable$.subscribe(value => console.log(value));

如上,生产者就是next(1)啊,next(2)啊中的1和2,Observable<number>则表示这个生产者是一个要发送number类型的生产者,给构造函数传入的function是一个接受一个observer的函数,这个observer对象拥有三个方法分别是next、error和complete。其中next方法用来消费生产者发送出来的数据,error用来捕获错误,complete用来通知完成。没错,这个observer就是一个观察者,观察者用来消费生产者发布的数据。

Observable内部可以想象成这样的一种结构:

class observable
{ _subscribe: (observer: Observer
) => Unsubscribable; constructor(subscriber: (observer: Observer
) => Unsubscribable) { this._subscribe = subscriber; } subscribe(observer: Observer
): Unsubscribable { this._subscribe(observer); return { unsubscribe: () => console.log('complete') }; }}

上面的代码简单的诠释了一个Observable的内部结构,Observer<T>是一个观察者,它拥有next、complete和error三个方法。

除了上面这些,Observable还有冷和热的的区别,这个以后补充,现在着急介绍下一个功能。

Subject

subject是Observable和Observer的结合,从Observable来看,subject本身是继承了Observable,从Observable来看,subject是observer的鸭子类型(兼容)。Subject的内部是这样的:

class subject
{ _observers: Observer
[]; subscribe(observer: Observer
): void { this._observers.push(observer); } next(value) { this._observers.forEach(item => item.next(value)); } complete() { this._observers.forEach(item => item.complete()); } error(value) { this._observers.forEach(err => err.error(value)); }}

不同于Observable的是Subject是多播的(组播),它可以通过一个生产者调动多个观察者。

基础的只知识就介绍到这里,下面介绍操作符。

 

转载于:https://www.cnblogs.com/pangjianxin/p/9952979.html

你可能感兴趣的文章
【JavaScript】Write和Writeln的区别
查看>>
百度编辑器图片在线流量返回url改动
查看>>
我对你的期望有点过了
查看>>
微信小程序wx:key以及wx:key=" *this"详解:
查看>>
下拉框比较符
查看>>
2.2.5 因子的使用
查看>>
css选择器
查看>>
photoplus
查看>>
Python 拓展之推导式
查看>>
[Leetcode] DP-- 474. Ones and Zeroes
查看>>
80X86寄存器详解<转载>
查看>>
c# aop讲解
查看>>
iterable与iterator
查看>>
返回顶部(动画)
查看>>
webpack+react+antd 单页面应用实例
查看>>
Confluence 6 SQL Server 数据库驱动修改
查看>>
Confluence 6 通过 SSL 或 HTTPS 运行 - 备注和问题解决
查看>>
【47.76%】【Round #380B】Spotlights
查看>>
Git(使用码云)
查看>>
分享Java web 开发必游之路
查看>>