rxjs 常用的静态操作符
create
const { Observable } = require('rxjs');
// 创建 Observables
var observable = Observable.create(observer => {
var id = setInterval(() => {
subscriber.next(123);
subscriber.error('err: ...');
subscriber.complete('done.');
}, 1000);
// 提供取消和清理 interval 资源的方法
return function unsubscribe() {
clearInterval(id);
};
});
// 订阅 Observables
var subscription = observable.subscribe(
v => console.log(v),
e => console.log(e),
done => console.log(done),
);
// .add() 合并多个订阅,以便同时取消订阅
// subscription.add(childSubscription);
// 撤销 add的合并
// subscription.remove(childSubscription);
// 3s后取消订阅
setTimeout(() => {
subscription.unsubscribe();
}, 3000)
of(...items) 和 from([...items])
按顺序发出每个元素, from 可以代替 fromPromise
let { of, from } = require("rxjs");
of(1, 2, 3).subscribe(v => l(v)); // 1,2,3
from([1, 2, 3]).subscribe(v => l(v));// 1,2,3
bindCallback
把普通的回调函数转化为 Observable
let { bindCallback } = require("rxjs");
function test(cb) { cb(1); }
let o$ = bindCallback(test)();
o$.subscribe(v => l(v)); // 1
bindNodeCallback
把标准的node回调函数转化为 Observable
let { bindNodeCallback } = require("rxjs");
let fs = require("fs");
// fs.readFile("./test.jss", "utf8", (e, d) => (!!e ? l(e) : l(d)));
let o$ = bindNodeCallback(fs.readFile)("./test.jss", "utf8");
o$.subscribe(v => l(v), e => l(e));
combineLatest
组合多个Observable以创建一个Observable, 其值是根据每个输入Observable的最新值计算
let { combineLatest, of, timer } = require("rxjs");
let o1$ = of(233);
let o2$ = of(12);
let o3$ = timer(0, 1000);
let o$ = combineLatest(o1$, o2$, o3$);
// let o$ = combineLatest([o1$, o2$, o3$]); // 和上面一样
o$.subscribe(v => l(v));
// [ 233, 12, 0 ]
// [ 233, 12, 1 ]
// [ 233, 12, 2 ]
// ...
empty
仅仅发出 complete 通知,其他什么也不做
let { empty } = require("rxjs");
const l = console.log;
empty().subscribe(l, l, () => l("done")); // done
forkJoin
连接传递的Observables发出的最后一个值。
let { forkJoin, of } = require("rxjs");
forkJoin(of(1), of(2, 3)).subscribe(l); // [ 1, 3 ]
merge
把多个流的合并到一个 流, 按顺序执行,异步流会被延后
let { merge, of, from } = require("rxjs");
merge(of(1), of(4), from(["a", "b"]), 1).subscribe(l); // 1 4 a b
concat
它顺序地从给定的Observable中发出所有值,必须等上一个完成才执行下一个
let { concat, interval, of } = require("rxjs");
let { take } = require("rxjs/operators");
const l = console.log;
let o1$ = interval(1000).pipe(take(4)); // take 接收源 最初的N个值
let o2$ = of(233);
let o$ = concat(o1$, o2$);
o$.subscribe(v => l(v)); // 0,1,2,3,233
never
创建一个不向观察者发出任何项的 Observable
let { never } = require("rxjs");
never().subscribe(l, l, () => l("done")); //
range
range(start: number = 0, count: number = 0)
let { range } = require("rxjs");
// 从2开始 发出后续 11位数字
range(2, 11).subscribe(l); // 2..12
throwError
仅仅发出 error 通知
let { throwError } = require("rxjs");
throwError("err message").subscribe(l, l, () => l("done")); // err message
timer
let { timer } = require("rxjs");
// 延迟3秒发送第一个值,然后马上结束
timer(3000).subscribe(
v=> console.log(v))
//每隔3s发送一个值,第一个值延迟5s
timer(5000, 3000).subscribe(
v=> console.log(v))
interval
在指定的时间间隔内发出序列号 0+
let { interval } = require("rxjs");
let { take } = require("rxjs/operators");
interval(200)
.pipe(take(3))
.subscribe(l); // 0,1,2
defer
懒惰地创建Observable
let { defer, of } = require("rxjs");
let o$ = defer(() => Math.random() > 0.5 ? of(1) : of(2) );
o$.subscribe(v => l(v));
zip
其值根据其每个输入Observable的值按顺序计算
let { zip, of } = require("rxjs");
let { map } = require("rxjs/operators");
let age$ = of(27, 25, 29);
let name$ = of("Foo", "Bar", "Beer");
let isDev$ = of(true, true, false);
zip(age$, name$, isDev$)
.pipe(map(([age, name, isdev]) => ({ age, name, isdev })))
.subscribe(l);
// res
{ age: 27, name: 'Foo', isdev: true }
{ age: 25, name: 'Bar', isdev: true }
{ age: 29, name: 'Beer', isdev: false }
iif
iif(test, then, else)
let { iif, of } = require("rxjs");
iif(() => Math.random() > 0.5, of("then"), of("else")).subscribe(l); // then | else
fromEvent
let { fromEvent } = require("rxjs");
const clicks$ = fromEvent(document, 'click');
clicks$.subscribe(x => console.log(x));
generate
仔细看有点像 for循环
let { generate } = require("rxjs");
generate(0, x => x < 3, x => x + 1).subscribe(
v => l(v),
err => {},
() => l("done"),
);
// 0, 1, 2, done
identity
没有做处理,返回值本身
let { identity } = require("rxjs");
let x = identity(233);
l(x); // 233
isObservable
let { isObservable } = require("rxjs");
l(isObservable(2)); // false
onErrorResumeNext
将无错误地移动到下一个源
let { onErrorResumeNext, of } = require("rxjs");
let { map } = require("rxjs/operators");
onErrorResumeNext(
of(1, 2, 0, 1).pipe(
map(el => {
if (el === 0) throw Error("000");
return el + el;
}),
),
of("2"),
).subscribe(l, err => console.error(err), () => l("done")); // 2, 4, 2, done
pairs
将对象转换为Observable
let { pairs, of } = require("rxjs");
pairs({
name: "ajanuw",
age: 14,
}).subscribe(l); // [ 'name', 'ajanuw' ] [ 'age', 14 ]
race
返回,第一个Observable的反映的输出,然后结束
let { race, of, interval } = require("rxjs");
race(interval(1000), of(2, 22), of(3)).subscribe(l, l, () => l("done")); // 2, 22, done
rxjs 常用的静态操作符的更多相关文章
- rxjs 常用的管道操作符
操作符文档 api 列表 do -> tap catch -> catchError switch -> switchAll finally -> finalize map s ...
- RxJS 中的创建操作符
RxJs 中创建操作符是创建数据流的起点,这些操作符可以凭空创建一个流或者是根据其它数据形式创建一个流. Observable的构造函数可以直接创建一个数据流,比如: const $source=ne ...
- 常用 Java 静态代码分析工具的分析与比较
常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...
- iOS项目开发常用功能静态库
YHDeveloperTools iOS项目开发常用功能静态库 查看源码 功能方法: 1.字符检查 [NSString checkStringWithType:Email andTargetStrin ...
- 【转载】常用 Java 静态代码分析工具的分析与比较
摘自:http://www.oschina.net/question/129540_23043常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后 ...
- javaScript常用运算符和操作符总结
javaScript常用运算符和操作符总结 类别 操作符 算术操作符 +. –. *. /. %(取模) 字符串操作符 + 字符串连接 +=字符串连接复合 布尔操作符 !. &&. ...
- Smarty笔记 和20个常用的变量操作符
什么是Smarty变量操作符php模板引擎smarty内置的一些操作函数,我们称之为变量操作符,变量操作符可用于操作变量,自定义函数和字符.(跟我PHP中常用的PHP内部函数类似)他可以帮助我们完成很 ...
- Rxjs常用operators
本文使用的是angular6内置的rxjs,版本号为6.3.3 concat 通过顺序地发出多个 Observables 的值将它们连接起来,一个接一个的. 参数: 名称 类型 属性 描述 other ...
- rxjs一句话描述一个操作符(1)
之前一直在写LINQ之类的东西,对于函数式的面向对象还是有一些功底,所以对于rxjs,感觉上不是很难,但是每次看完过几天就忘,还是记一下笔记吧,好记性不如烂笔头真不是盖的. 首先介绍几个重要的概念. ...
随机推荐
- AI通过了艺术创作图灵测试,你根本分不出来作者是不是人
各位geek朋友们,今年不用再看画了:近年来最大的艺术成就已经发生了. 这项艺术成就的诞生地,不是北京.新加坡.柏林郊区颜料四溅的画室中,不是威尼斯双年展上.请记住它出现的地点:美国新泽西州新布朗斯维 ...
- grid - 网格线命名
通过grid-template-rows和grid-template-columns定义网格时,网格线可以被命名.网格线名称也可以设置网格项目位置. grid-template-rows和grid-t ...
- PL/SQL出现存储过程注释中文乱码
进入PL/SQL命令行窗口输入:select userenv('language') from dual 查出数据库字符集 输入:select * from V$NLS_PARAMETERS 查出NL ...
- vmlinux,zImage,bzImage,vmlinuz,uImage,关系
zImage和uImage的区别 一.vmlinuz vmlinuz是可引导的.压缩的内核.“vm”代表“Virtual Memory”.Linux 支持虚拟内存,不像老的操作系统比如DOS有640K ...
- 用 JAAS 和 JSSE 实现 Java 安全性
JAAS 和 JSSE 概述 JAAS 提供了一种灵活的.说明性的机制,用于对用户进行认证并验证他们访问安全资源的能力.JSSE 定义了通过安全套接字层(SSL)进行安全 Web 通信的一种全 Jav ...
- 动态改变APP图标
一.iOS动态更换App图标(一):基础使用 该功能应用的场景 1.白天/夜间模式切换,在切换App主色调同时切换App图标. 2.各类皮肤主题(淘宝就可换肤),附带App图标一块更换. 3.利用Ap ...
- Effective Java 第三版——45. 明智审慎地使用Stream
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- HTML5学习笔记(二十八):跨域
在跨域安全性方面,有多个地方会有限制,主要是XMLHttpRequest对象的跨域限制和iFrame的跨域限制,下面我们分别来看一下. Ajax跨域(CORS) CORS是一个W3C标准,全称是&qu ...
- 《转》推荐几个精致的web UI框架
1.Aliceui Aliceui是支付宝的样式解决方案,是一套精选的基于 spm 生态圈的样式模块集合,是 Arale 的子集,也是一套模块化的样式命名和组织规范,是写 CSS 的更好方式. git ...
- Math.Round四舍六入五取偶Math.Ceiling只要有小数都加1Math.Floor总是舍去小数
1.Math.Round:四舍六入五取偶 引用内容 Math.Round(0.0) //0Math.Round(0.1) //0Math.Round(0.2) //0Math.Round(0.3) / ...