RxJS 系列 – 大杂烩
前言
RxJS 有太多方法了, 想看完整的可以去看 REFERENCE – API List, 这篇介绍一些非 operator 的常用方法.
NEVER
NEVER.subscribe({
complete: () => console.log('complete'), // never be called
next: () => console.log('next'), // never be called
error: () => console.log('error'), // never be called
});
就是一个永远不会发布的流...有啥用呢?
比如, 有一个 slide down 的方法, 它支持开关控制
setupSlideDown({
targetElement: cardWrapper,
open$: fromEvent(openBtn, 'click'),
close$: fromEvent(closeBtn, 'click'),
});
所以需要传入 open$ 和 close$ 流. 但是有一个奇葩场景. 这个场景是没有关闭的. 所以就没有 closeBtn click event.
那这时 NEVER 就排上用场了.
setupSlideDown({
targetElement: cardWrapper,
open$: fromEvent(openBtn, 'click'),
close$: NEVER,
});
EMPTY
EMPTY.subscribe({
complete: () => console.log('complete'), // call immediately
next: () => console.log('next'), // never be called
error: () => console.log('error'), // never be called
});
它是一个立马结束的流. 和 NEVER 的是用意图差不多, 都是用在那些特殊场景的.
它也类似我们经常会 用 empty array, empty string, empty function 作为参数或返回. 这样后续就容易统一处理.
lastValueFrom & firstValueFrom
lastValueFrom(of(1, 2, 3)).then(value => {
console.log(value); // 3
}); firstValueFrom(of(1, 2, 3)).then(value => {
console.log(value); // 1
});
lastValueFrom 是 v7.0 后用来替代以前的 .toPromise 的。
它会监听流的发布,等到流 complete 后,resolve 最后一个 value。
firstValueFrom 同样监听流发布,发布第一个之后它会 unsubscribe 流,然后 resolve first value。
finalize
finalize 是一个 operator。它用来监听 Observable 的 “结束” 事件 -- error, complete, unsubscribe
const subject = new Subject();
const obs = subject.asObservable();
const subscription = obs.pipe(finalize(() => console.log('finalize'))).subscribe(); // 下面 3 种情况,finalize 都会接收到
subject.error('error');
subject.complete();
subscription.unsubscribe();
Observable.subscribe 只能监听到 next, error, complete。只有 new Observable 的 callback 函数才可以监听到 unsubscribe。
finalize operator 内部原理是它 wrap 了一层 Observable,unsubscribe 依然是靠 Observable 的 callback 函数监听到的。
RxJS 系列 – 大杂烩的更多相关文章
- RxJS——调度器(Scheduler)
调度器 什么是调度器?调度器是当开始订阅时,控制通知推送的.它由三个部分组成. 调度是数据结构.它知道怎样在优先级或其他标准去存储和排队运行的任务 调度器是一个执行上下文.它表示任务在何时何地执行(例 ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数
上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...
- rxjs5.X系列 —— filter系列 api 笔记
欢迎指导与讨论 :) 前言 本文是笔者翻译 RxJS 5.X 官网各类operation操作系列的的第二篇 -- filter转换.如有错漏,希望大家指出提醒O(∩_∩)O.更详细的资料尽在rxjs官 ...
- rxjs5.X系列 —— transform系列 api 笔记
欢迎指导与讨论:) 前言 本文是笔者翻译 RxJS 5.X 官网各类operation操作系列的的第一篇 -- transform转换.如有错漏,希望大家指出提醒O(∩_∩)O.更详细的资料尽在rxj ...
- ASP.NET Web API 入门大杂烩
[前言] 本文是大杂烩,意思即是:到处Copy再加一点点思考而混在一起的文章,引用来源因为太多太杂故而省略,望原作者原谅. [概述] ASP.NET Web API随ASP.NET MVC 4一起发行 ...
- rxjs5.X系列 —— Combination/Multicasting系列 api 笔记
欢迎指导与讨论 :) 前言 本文是笔者翻译 RxJS 5.X 官网各类operation操作系列的的第三篇 -- Combination组合与Multicasting广播.如有错漏,希望大家指出提醒O ...
- angular2 学习笔记 ( rxjs 流 )
RxJS 博大精深,看了好几篇文章都没有明白. 范围牵扯到了函数响应式开发去了... 我对函数式一知半解, 响应式更是第一次听到... 唉...不过日子还是得过...混着过先呗 我目前所理解的很浅, ...
- RX系列一 | ReactiveX根源 | 观察者模式分析
RX系列一 | ReactiveX根源 | 观察者模式分析 Rx的响应式编程算是很火了,对吧,但是我的工作基本上就不会接触,所以学习的比较晚,到现在才分享给大家,我们一点点的去学,当你看完这整个系列的 ...
随机推荐
- JavaScript系列:JS实现复制粘贴文字以及图片
目录 一. 基于 Clipboard API 复制文字(推荐) 基本概念 主要方法 使用限制 实际应用示例 二.基于 document.execCommand('copy') 缺陷 实际应用示例 说明 ...
- 在Eclipse中使用Project Explorer视图与Package Explorer视图
1.在项目文件比较多的情况下,为了方便查看整体和及时定位到项目文件,通常会同时使用Project Explorer视图与Package Explorer视图. 2.打开Project Explorer ...
- Kafka kafka在windows下的安装与配置
kafka在windows下的安装与配置 By: 授客 QQ:1033553122 1.测试环境.............................................. ...
- Vue仿微信PC客户端
一个模仿PC微信客户端的纯前端vue项目 项目地址 github: https://github.com/TomHusky/vue-wechat-demo gitee: https://gitee.c ...
- app专项测试:app弱网测试(测试工具)
app专项测试:app弱网测试(测试工具) 除了常用的 fiddler,charles 可以模拟弱网,还有硬件工具弱网仪 HoloWAN也可以模拟弱网 使用弱网仪有以下优点:1.即插即用,无需调试和复 ...
- python tesseract-ocr 图文识别 (windows基础环境搭建)
python tesseract-ocr 图文识别 一,先进行Tesserocr安装下载 1,先点击进入下面的百度网盘链接: https://pan.baidu.com/s/1G5vZO2B4Mxx5 ...
- 【Scala】03 函数
1.Scala的方法语法: object Hello { def main(args : Array[String]) : Unit = { // scala 允许在方法的声明中再声明方法,并且调用 ...
- 【SpringBoot】03 自动装配原理探索
SpringBoot的依赖探索 首先是一个父级依赖管理的pom.xml [Ctrl + 左键点击]访问进去之后还有父级的父级 到最后才是我们的真正的顶级父类Pom.xml 我们当前的父级坐标 < ...
- Jax框架的Traced object特性与TensorFlow的placeholder的一致性
前文: Jax框架的static与Traced Operations -- Static vs Traced Operations 前文讨论分析了Jax的static特性和Traced特性,这些谈下个 ...
- 如何在多台Linux系统主机上实现ssh免密访问——成公钥文件id_rsa.pub(数字签名RSA)
假设共有三台Linux主机,为matser,slave1,slave2,现在要实现master主机可以ssh免密访问master主机自身以及slave1.slave2. 原理: 主机调用秘钥生成命令, ...