rxjs一句话描述一个操作符(1)
之前一直在写LINQ之类的东西,对于函数式的面向对象还是有一些功底,所以对于rxjs,感觉上不是很难,但是每次看完过几天就忘,还是记一下笔记吧,好记性不如烂笔头真不是盖的。
首先介绍几个重要的概念。
可以通过这个URL来详细了解相关知识:https://www.jianshu.com/p/f2f87925b229
rxjs中有几个重要的概念,有Observable、Observer、Subject,他们参考了观察者模式(或者叫发布/订阅模式)和迭代器模式。rxjs中有一个数据流的概念,和LINQ很类似,可以想象有一根管道,数据缓缓从管道中流过。发送数据的角色是生产者,消费数据的角色是观察者,观察者要想消费数据的话得知道生产者什么时候发送数据,也就是说,观察者要从生产者订阅一下通知,以便及时消费数据,这个过程就是由Observable来完成的。
Observable
Observevable是一个对象,如果要创建一个Observable,可以从如下两个例子来看:
const observable$ = new Observable<number>(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<T> {
_subscribe: (observer: Observer<T>) => Unsubscribable;
constructor(subscriber: (observer: Observer<T>) => Unsubscribable) {
this._subscribe = subscriber;
}
subscribe(observer: Observer<T>): Unsubscribable {
this._subscribe(observer);
return { unsubscribe: () => console.log('complete') };
}
}
上面的代码简单的诠释了一个Observable的内部结构,Observer<T>是一个观察者,它拥有next、complete和error三个方法。
除了上面这些,Observable还有冷和热的的区别,这个以后补充,现在着急介绍下一个功能。
Subject
subject是Observable和Observer的结合,从Observable来看,subject本身是继承了Observable,从Observer来看,subject是observer的鸭子类型(兼容)。Subject的内部是这样的:
class subject<T> {
_observers: Observer<T>[];
subscribe(observer: Observer<T>): 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是多播的(组播),它可以通过一个生产者调动多个观察者。
基础的只知识就介绍到这里,下面介绍操作符。
rxjs一句话描述一个操作符(1)的更多相关文章
- ALTER OPERATOR CLASS - 修改一个操作符表的定义
SYNOPSIS ALTER OPERATOR CLASS name USING index_method RENAME TO newname DESCRIPTION 描述 ALTER OPERATO ...
- Python练习——约瑟夫环问题、用类方法描述一个数字时钟
一.约瑟夫环问题 有15个基督徒和15个非基督徒在海上遇险,为了能让一部分人活下来不得不将其中15个人扔到海里面去,有个人想了个办法就是大家围成一个圈,由某个人开始从1报数,报到9的人就扔到海里面,他 ...
- 第五十一个知识点:什么是基于ID的加密的安全模型,然后描述一个IBE方案
第五十一个知识点:什么是基于ID的加密的安全模型,然后描述一个IBE方案 在公钥密码学中,如果Alice想要给Bob发送一条消息,她需要Bob的公钥,一般来说公钥都很长,就像一个随机的字符串. 假设A ...
- 第二十四个知识点:描述一个二进制m组的滑动窗口指数算法
第二十四个知识点:描述一个二进制m组的滑动窗口指数算法 简单回顾一下我们知道的. 大量的密码学算法的大数是基于指数问题的安全性,例如RSA或者DH算法.因此,现代密码学需要大指数模幂算法的有效实现.我 ...
- DROP OPERATOR - 删除一个操作符
SYNOPSIS DROP OPERATOR name ( lefttype | NONE , righttype | NONE ) [ CASCADE | RESTRICT ] DESCRIPTIO ...
- DROP OPERATOR CLASS - 删除一个操作符类
SYNOPSIS DROP OPERATOR CLASS name USING index_method [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP OPER ...
- RxJS 中的创建操作符
RxJs 中创建操作符是创建数据流的起点,这些操作符可以凭空创建一个流或者是根据其它数据形式创建一个流. Observable的构造函数可以直接创建一个数据流,比如: const $source=ne ...
- 重写toString()方法来描述一个类
package com.zch.test; /* toString方法以及重写toString方法 toString方法是一个自我描述方法 方法本身返回的是该对象的实现类的 类名 + @ + hash ...
- 给定一个实数数组,按序排列(从小到大),从数组从找出若干个数,使得这若干个数的和与M最为接近,描述一个算法,并给出算法的复杂度。
有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M. 需要选出若干个x,使这几个x的和与 M 最接近. 请描述实现算法,并指出算法复杂度. #define M 8 ...
随机推荐
- WebLogic及其他
如何给WebLogic指定大小的内存? 在启动WebLogic的脚本中(位于所在Domian对应服务器目录下的startServerName),增加set MEM_ARGS= -Xms32m -Xmx ...
- WPF 语言格式化文本控件
前言 本章讲述正确添加语言资源的方式,以及一段语言资源的多种样式显示. 例如:“@Winter,你好!感谢已使用软件 800 天!” 在添加如上多语言资源项时,“XX,你好!感谢已使用软件 X 天!” ...
- IOC,DIP,DI,IoC容器
定义 IOC(Inversion of Control 控制反转),DIP(Dependency Inverson Principle 依懒倒置)都属于设计程序时指导原则,并没有具体的实现.比较常用 ...
- Java开发笔记(七十九)利用反射技术操作私有属性
早在介绍多态的时候,曾经提到公鸡实例的性别属性可能被篡改为雌性,不过面向对象的三大特性包含了封装.继承和多态,只要把性别属性设置为private私有级别,也不提供setSex这样的性别修改方法,那么性 ...
- html中节点类型
常用的节点有元素节点.属性节点.文本节点.注释节点.文档节点 来看例子: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transition ...
- WEB前端学习代码片段记录
1.JS设计模式片段 Function.prototype.addMethod = function (name,fn) { this.prototype[name] = fn; return thi ...
- SAP MM盘点流程里如何处理事务代码MI11 Recount过的盘点凭证?
SAP MM盘点流程里如何处理事务代码MI11 Recount过的盘点凭证? 1, MI01 create a physical inventory document, 2, MI04 to inpu ...
- Android WebView的HTML中的select标签不起作用
Android WebView的HTML中的select标签不起作用 经过查询资料,了解到android对html里的select标签是弹出一个原生的选择器. 问题: Webview中的select没 ...
- 常用weblogic搜索关键字
NOTE:876004.1 - How to Apply WebLogic Server (WLS) Patches Using Smart Update [Video]NOTE:942815.1 - ...
- ArcGIS Server较早版本切片迁移注意事项
原创文章,转载须标明出处自: http://www.cnblogs.com/gisspace/p/8286838.html -------------------------------------- ...