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 ...
随机推荐
- MEF 基础简介 四
前言 前面讲解了MEF的引用方法,接口的导入导出,类属性的导入导出和集合的导出用法其实大家可以看到基本上大同小异的. MEF的延迟加载 我们知道当装配一个组件的时候,当前组件里面的所有的Import的 ...
- [PHP] pow指数运算函数与二进制
1.a的-2次方=(a分之一)的2次方2.-a的2次方 3次方 按照这个规则,负负得正,负正得负,正正得正,指数是偶数最终结果是正的,是奇数就是负的3.二进制转换十进制,0b开头是二进制 <?p ...
- JS截取数字
Math是javascript的一个内部对象,该对象的方法主要是一些数学计算方法floor:下退 Math.floor(12.9999) = 12ceil:上进 Math.ceil(12.1) = 1 ...
- GC垃圾回收
我们在开发需求的时候,可能很少关注到垃圾回收,因为我们绝大多数的时候都是使用的托管资源,托管资源的内存回收.net已经帮我们做了,但是.net的内存回收不是实时的,所以我们还是要关注下.net的垃圾回 ...
- Python全栈开发之---装饰器
1.装饰器的形成过程 import time def func1(): print('in func1') def timer(func): def inner(): start = time.tim ...
- Android Studio 关于沉浸式状态栏
values-v19/style.xml <style name="AppTheme" parent="Theme.AppCompat.Light.NoAction ...
- WEB 实时推送技术的总结
前言 随着 Web 的发展,用户对于 Web 的实时推送要求也越来越高 ,比如,工业运行监控.Web 在线通讯.即时报价系统.在线游戏等,都需要将后台发生的变化主动地.实时地传送到浏览器端,而不需要用 ...
- CSS像素、物理像素、逻辑像素、设备像素比、PPI、Viewport
1.PX(CSS pixels) 1.1 定义 虚拟像素,可以理解为“直觉”像素,CSS和JS使用的抽象单位,浏览器内的一切长度都是以CSS像素为单位的,CSS像素的单位是px. 1.2 注意 在CS ...
- ionic3 Modal组件
Modal组件主要用来弹出一些临时的框,如登录,注册的时候用 弹出页面html页面 <button ion-button small outline color="he" ...
- Android 图片加载框架 Glide4.x
概述 Glide是一个图片加载框架,使得我们可以轻松的加载和展示图片 Glide4.x新增apply()来进行设置,apply可以调用多次,但是如果两次apply存在冲突的设置,会以最后一次为准 新增 ...