rxjs operator学习笔记
Pipeable Operators are the kind that can be piped to Observables using the syntax observableInstance.pipe(operator()). These include, filter(…), and mergeMap(…). When called, they do not change the existing Observable instance. Instead, they return a new Observable, whose subscription logic is based on the first Observable. A Pipeable Operator is a function that takes an Observable as its input and returns another Observable. It is a pure operation: the previous Observable stays unmodified.
operator就是函数式编程世界里的一等公民,接收一个Observable作为输入,返回另一个新的Observable对象。
Operators are the essential pieces that allow complex asynchronous code to be easily composed in a declarative manner.
借助operator,我们可以使用一种声明式的方式来进行异步编程。
map((x: number) => x * x)(of(1, 2, 3)).subscribe((v) => console.log(`value: ${v}`));
上面这个例子里map的左右括号很有迷惑性,乍一看很像函数调用的括号,实际上括号内包含的是箭头函数的函数体。
下图这对括号才是真正函数调用的括号。
let a = (x: number) => x * x;
let b = map(a);
let c = of(1,2,3);
// c.subscribe((data) => console.log('value: ' + data ));
let d = b(c);
d.subscribe((data) => console.log('diablo: ' + data));
let a = (x: number) => x * x;
let b = map(a);
let c = of(1,2,3);
// c.subscribe((data) => console.log('value: ' + data ));
let d = b(c);
d.subscribe((data) => console.log('diablo: ' + data));
let e = (x: number) => x + x;
let f = map(e);
let g = f(d);
g.subscribe((data) => console.log('baal: ' + data));
一旦operators的嵌套个数变多,代码可读性将急剧下降:
op4()(op3()(op2()(op1()(obs))))
因此有了Observable对象的pipe方法。
使用Observable的pipe方法重构之后的代码,可读性提高了很多:
语法:
obs.pipe(
op1(),
op2(),
op3(),
op3(),
)
pipe里用逗号分隔多个operator,operators名称加上括号,括号里是具体的操作逻辑。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 到底什么才是真正的空间复杂度?
- RabbitMQ都写了,RocketMQ怎么能落下?
- dotnet ConcurrentDictionary 的 GetOrAdd 性能比 TryGetValue 加 TryAdd 低
- CentOS7下升级GLIBC2.31
- 网络扫描利器Fing之Linux版本使用教程
- dotnet 通过依赖注入的 Scoped 给工作流注入相同的上下文信息
- 微信文章爬虫
- vue 随记(6):构建的艺术
- Centos7发布SpringBoot项目并后台运行
- k8s部署zookeeper集群
- dotnet 使用 SemaphoreSlim 可能的内存泄露
- WPF 绑定继承的样式提示 只能根据带有基类型 IFrameworkInputElement 的目标类型的 Style 样式
- 29.opengl高级光照-视差贴图
- SpringBoot集成Mybatis开启下划线格式的数据自动转换成小驼峰格式
- WPF 列表右键菜单比较符合 MVVM 的命令绑定方法