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的响应式编程算是很火了,对吧,但是我的工作基本上就不会接触,所以学习的比较晚,到现在才分享给大家,我们一点点的去学,当你看完这整个系列的 ...
随机推荐
- [oeasy]python0081_[趣味拓展]ESC键进化历史_键盘演化过程_ANSI_控制序列_转义序列_CSI
光标位置 回忆上次内容 上次了解了 新的转义模式 \033 逃逸控制字符 escape 这个字符 让字符串 退出标准输出流 进行控制信息的设置 可以设置 光标输出的位置 添加图片注 ...
- oeasy教您玩转vim - 33 - # 查找文本
文字区块 回忆上节课内容 括号间跳转 成对括号间跳转 % 不成对括号间跳转 [( 跳转到上一个没配对的 ( [) 跳转到下一个没配对的 ) [{ 跳转到上一个没配对的 { [} 跳转到下一个没配对 ...
- [oeasy]python0009 - 设置断点_break_point
调试程序 回忆上次内容 py 的程序是按照顺序执行的 是一行行挨排解释执行的 程序并不是数量越多越好 kpi也在不断演化 编辑 写的代码越多 出现的bug就越多 那什么是bug呢? 如何 ...
- Docker安装及操作
目录 docker 安装: 官方文档方法 CentOS Ubuntu docker-compose 单独安装 centos7 ubuntu22.04 docker 容器操作: docker启动与停止 ...
- LRZ
1.在平面直角坐标系中,已知点 \(A(-2,2).B(3,4).C(0,1)\),直线 \(y=kx+b\) 过点 \(C\) 且与线段 \(AB\) 有交点,则 \(k\) 的取值范围是_____ ...
- 关于Script的猜想和代码设计
由于现在接触的是蓝图,而之前接触的脚本,这两者有些不一样. 对脚本的设计如果是代码的解析的话, 对蓝图的设计则需要提供一些底层的API. 变量分为: 基础类型 ,复合类型 ,容器类型 NewGlob ...
- ComfyUI插件:ComfyUI Impact 节点(二)
前言: 学习ComfyUI是一场持久战,而 ComfyUI Impact 是一个庞大的模块节点库,内置许多非常实用且强大的功能节点 ,例如检测器.细节强化器.预览桥.通配符.Hook.图片发送器.图片 ...
- Jmeter函数助手24-longSum
longSum函数可用于计算两个或多个长值的和.intSum函数参数值的范围在-2147483648到2147483647之间,而longSum函数的参数值范围比intSum的大. First lon ...
- 【Mybatis】Bonus01 笔记资料
对原生JDBC程序的问题总结 public void jdbc() { // 声明Connection对象 Connection con; // 驱动程序名 String driver = " ...
- 如何理解计算机类论文、机器学习论文、人工智能AI论文中的“soft”和“hard”呢?
如何理解计算机类论文.机器学习论文.人工智能AI论文中的"soft"和"hard"呢? 最近在看论文中总看到带有"soft"和"h ...