Rxjs 操作符决策树 - Mindnode Bobi.ink 2019-04-06 Mindnode 是 macOS 下一个美观简洁的思维导图工具, 它是一个强大的学习/整理工具..., 本文列举了近日学习rxjs所整理出来的思维导图....学习资源 官方文档 可交互的弹珠图 直观地理解操作符的功能 reactive.how 学习响应式编程的动画卡片 学习RxJS操作符 book: 深入浅出RxJS 创建操作符 image.png 过滤操作符...image.png 转换操作符 image.png 组合操作符 image.png 分组操作符 image.png 错误处理操作符 image.png 辅助-条件-数学-配置操作符...image.png 多播操作符 image.png 高阶 Observable 操作符 image.png Please enable JavaScript to view the comments
# 为什么要有操作符 一个操作符是返回一个 Observable 对象的函数,不过,有的操作符是根据其他 Observable 对象产生返回的 Observable 对象,有的操作符则是利用其他类型输入产生返回的...const result$ = source$.filter(x => x % 2 === 0).map(x => x * 2); result$.subscribe(console.log); 在 RxJS...source$)(project); 即 const operator = map.bind(source$); const result$ = operator(project); 使用 lift RxJS...error), complete: () => this.complete() }); }); } Observable.prototype.map = map; 虽然 RxJS...v5 的操作符都架构在 lift 上,应用层开发者并不经常使用 lift ,这个 lift 更多的是给 RxJS 库开发者使用。
| 功能需求 | 适用的操作符 | | 统计数据流中产生的所有数据个数 | count | | 获得数据流中最大或者最小的数据 | max 和 min | | 对数据流中的数据进行规约操作 | reduce...| find 和 findIndex | | 判断一个数据流是否不包含任何数据 | isEmpty | | 判断一个数据流为空就默认产生一个指定数据 | defaultIfEmpty | # 数学类操作符...数学类操作符是体现数学计算功能的一类操作符,RxJS 自带的数学类操作符只有四个,分别是: count max min reduce 所有这些操作符都是实例操作符,还有一个共同特点,就是这些操作符必定会遍历上游...# 条件布尔类操作符 # every import 'rxjs/add/operator/every'; const source$ = Observable.of(1, 2, 3, 4, 5); const...import 'rxjs/add/observable/of'; import 'rxjs/add/operator/find'; import 'rxjs/add/operator/findIndex
---- RxJS 转换操作符,继续冲冲冲!熟悉的温故知新,不熟悉的混个脸熟先~ buffer buffer 顾名思义就是“缓存”,可以在某些条件下进行值的收集,然后再在某些条件下,将收集的值发出。...输出: Sum: 10' const subscribe = example.subscribe(val => console.log('Sum:', val)); window 还有:window 操作符...,是时间窗口值的 observable; // RxJS v6+ import { timer, interval } from 'rxjs'; import { window, scan, mergeAll...---- OK,以上便是本篇分享,往期关于 RxJS 的内容: 3 分钟温故知新 RxJS 创建实例操作符 你就是函数响应式编程(FRP)啊?!...【附 RxJS 实战】 为什么说:被观察者是 push 数据,迭代者是 pull 数据? 探秘 RxJS Observable 为什么要长成这个样子?!
这节讲非常重要同时非常容易混淆的合并操作符,从名字上次都是合并,但是区别还是蛮大的,我会尽量结合Marble Diagram(弹珠图)解释清楚。...并顺序依次执行 特点:按照顺序,前一个 observable 完成了再订阅下一个 observable 并发出值 注意事项:此操作符可以既有静态方法,又有实例方法 Marble Diagram:...; const { of } = rxjs; const sourceOne = of(1, 2, 3); const sourceTwo = of(4, 5, 6);...console.log('Example: Basic concat:', val) ); // 等价写法, 把 concat 作为静态方法使用,这样更直观 rxjs...同样 既有静态方法,又有实例方法 rxjs .merge( interval(500).pipe(take(3)), interval(300).pipe
---- 前不久写了 3 篇关于 RxJS 的入门级文章: 你就是函数响应式编程(FRP)啊?!【附 RxJS 实战】 为什么说:被观察者是 push 数据,迭代者是 pull 数据?...探秘 RxJS Observable 为什么要长成这个样子?!...在几个月之前,也有两篇关于 RxJS 的探秘: Js 异步处理演进,Callback=>Promise=>Observer 继续解惑,异步处理 —— RxJS Observable RxJS 有很多神奇的东西...所以,借着更文的契机,日日新、月月新,学习 RxJS 接着冲~ 本篇带来:observables 操作符 —— 创建实例,是基础之基础、重要之重要; 操作符为复杂的异步任务提供了一种优雅的声明式解决方案...0,1,2,3,4,5...... const subscribe = source.subscribe(val => console.log(val)); OK,以上便是对核心的创建实例的 Observable 操作符的介绍
这节讲处理高阶 Observable 的操作符 所谓的 Higher Order Observable 就是指一个 Observable 发送出的元素还是一个 Observable,就像是二维数组一样...注意:RxJS5 中叫switch,由于与Javascript保留字冲突,RxJS 6中对以下运算符名字做了修改:do -> tap, catch ->catchError, switch -> switchAll
/lib/rxjs6.3.3.umd.js'> // https://rxjs-cn.github.io/learn-rxjs-operators/operators...interval(1000) .pipe( // timer(5000) 是等待5s发出值 // takeUntil 只取timer(5000)开始发出之前的那些值....subscribe(val => console.log(val)); interval(1000) .pipe( // timer(5000) 是等待...; interval(1000) .pipe( // timer(5000) 是等待5s发出值 // skipUntil 舍弃timer(5000)....subscribe(val => console.log(val)); interval(1000) .pipe( // timer(5000) 是等待
const { interval, timer } = rxjs; const { debounce } = rxjs.operators; // 每1秒发出值, 示例: 0...1..../lib/rxjs6.3.3.umd.js'> // https://rxjs-cn.github.io/learn-rxjs-operators/operators.../filtering/debouncetime.html // debounceTime // 舍弃掉在两次输出之间小于指定时间的发出值 // 此操作符在诸如预先知道用户的输入频率的场景下很受欢迎...const { fromEvent, timer } = rxjs; const { debounceTime, map } = rxjs.operators; const input...const example = fromEvent(input, 'keyup').pipe(map(i => i.currentTarget.value)); // 在两次键盘敲击之间等待
Rxjs_Subject 及其衍生类 在 RxJS 中,Observable 有一些特殊的类,在消息通信中使用比较频繁,下面主要介绍较常用的几个类: 1/ Subject Subject 可以实现一个消息向多个订阅者推送消息
,只取N个数的元素 skip: 传入数字,跳过N个元素 last: 取最后一个元素 first: 取最后一个元素 rxjs.../6.5.1/rxjs.umd.js'> const { from } = rxjs; const { filter, take, last, startWith..., skip } = rxjs.operators; // 发出(1, 2, 3, 4, 5) const source = from([1, 2, 3, 4, 5]); const
第一个例子: import { Observable } from "rxjs/Observable"; import { Subscription } from "rxjs/Subscription"...; import 'rxjs/add/observable/interval'; const observable = Observable.interval(1000); const subscription...而subscription在unsubscribe这个observable的时候, 会调用这个参数函数返回的function, 看例子: import { Observable } from "rxjs.../Observable"; import { Subscription } from "rxjs/Subscription"; import 'rxjs/add/observable/interval'.../Observable"; import { Subscription } from "rxjs/Subscription"; import 'rxjs/add/observable/interval'
RxJS引入了Observables,一个新的javascript推送体系。...在上一个版本的 RxJS 中,Subscription 叫做 “Disposable” (可清理对象)。...– RxJS Subject 是一种特殊类型的 Observable,它允许将值多播给多个观察者,所以 Subject 是多播的,而普通的 Observables 是单播的(每个已订阅的观察者都拥有 Observable...,因为它也是等待 complete 通知,以发送一个单个值。...Operators (操作符) 尽管 RxJS 的根基是 Observable,但最有用的还是它的操作符。操作符是允许复杂的异步代码以声明式的方式进行轻松组合的基础代码单元。 什么是操作符?
Rxjs英文官网域名已经变为 https://rxjs-dev.firebaseapp.com/ 本文中的例子均采用5.3版本 感受Rxjs 第一个小练习 学习用observable的方式来注册事件监听... 第一个Rxjs...练习 click me rxjs...function () { subscription.unsubscribe(); }, 5000); Operators 操作符...常见的操作符如map(对订阅的数据过滤),throttleTime(延迟订阅的频率) ?
订阅 Observable 在介绍 RxJS Subject 之前,我们先来看个示例: import { interval } from "rxjs"; import { take } from "rxjs...RxJS Subject 其实 RxJS 也为我们提供了 Subject 类,接下我们来利用 RxJS 的 Suject 重写一下上面的示例: import { interval, Subject }...from "rxjs"; import { take } from "rxjs/operators"; const interval$ = interval(1000).pipe(take(3));...AsyncSubject AsyncSubject 类似于 last 操作符,它会在 Subject 结束后发出最后一个值,具体示例如下: import { AsyncSubject } from "rxjs...Angular RxJS Subject 应用 在 Angular 中,我们可以利用 RxJS Subject 来实现组件间通信,具体示例如下: message.service.ts import {
1); observer.next(2); observer.next(3); }; // 调用 Observable 构造函数,产生数据流 source$ // onSubscribe 会等待...在 RxJS 中,组成数据管道的元素就是操作符,对于每一个操作符,链接的就是上游(upstream)和下游(downstream)。...对一个操作符来说,上游可能是一个数据源,也可能是其他操作符,下游可能是最终的观察者,也可能是另一个操作符,每一个操作符之间都是独立的,正因为如此,所以可以对操作符进行任意组合,从而产生各种功能的数据管道...中的数据来产生新的 Observable 对象,也就是把上游数据转化为下游数据,所有这些函数统称为操作符。...为了描述操作符的功能,弹珠图中往往会出现多条时间轴,因为大部分操作符的工作都是把上游的数据转为传给下游的数据,在弹珠图上必须把上下游的数据流都展示出来。
RxJS 提供了一系列可以完成 Observable 组合操作的操作符,这一类操作符称为合并类(combination)操作符,这类操作符都有多个 Observable 对象作为数据来源,把不同来源的数据根据不同的规则合并到一个...不少合并类操作符都有两种形式,既提供静态操作符,又提供实例操作符。...# forkJoin forkJoin 只有静态操作符的形式,可以接受多个 Observable 对象作为参数, forkJoin 产生的 Observable 对象也很有特点,它只会产生一个数据,因为它会等待所有参数...所以说, forkJoin 就是 RxJS 界的 Promise.all , Promise.all 等待所有输入的 Promise 对象成功之后把结果合并, forkJoin 等待所有输入的 Observable...# 操作高阶 Observable 的合并类操作符 RxJS 提供对应的处理高阶 Observable 的合并类操作符,名称就是在原有操作符名称的结尾加上 All ,如下所示: concatAll mergeAll
这种模式可以极大地简化并发操作,因为它创建了一个处于待命状态的观察者哨兵,在未来某个时刻响应Observable的通知,不需要阻塞等待Observable发射数据。...、every, 等等),这些数组操作符可以把异步事件作为集合来处理。...Operators (操作符): 采用函数式编程风格的纯函数 (pure function),使用像 map、filter、concat、flatMap 等这样的操作符来处理集合。...注意:网上很多例子都是基于rxjs5版本,而最新的rxjs6变化很大,具体参见和中文,后面的例子我都会基于rxjs6。 建议直接看官方文档,毕竟是最新的。...) https://mcxiaoke.gitbooks.io/rxdocs/content/ 学好rxjs的关键是对Operators (操作符)的灵活使用,操作符就是纯函数,我们使用操作符创建,
RxJS 中含有两个基本概念:Observables 与 Observer。...import { from } from "rxjs"; import { map } from "rxjs/operators"; const source$ = from([1, 2, 3, 4,...渐进式取值 数组中的操作符如:filter、map 每次都会完整执行并返回一个新的数组,才会继续下一步运算。...Functional Programming 为了更好地理解数组操作符的运算过程,我们可以查看 Array Compute。...具体示例如下: import { from } from "rxjs"; import { filter, map } from "rxjs/operators"; const source$ = from
封装 继承 多态 由此来看,借用《深入浅出 RxJS》中的话用来收尾对 OOP 和 FP 的比较: 函数式编程中,倾向于数据就是数据,函数就是函数,函数可以处理 数据,也是并不像面向对象的类概念一样把数据和函数封在一起