前言

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 系列 – 大杂烩的更多相关文章

  1. RxJS——调度器(Scheduler)

    调度器 什么是调度器?调度器是当开始订阅时,控制通知推送的.它由三个部分组成. 调度是数据结构.它知道怎样在优先级或其他标准去存储和排队运行的任务 调度器是一个执行上下文.它表示任务在何时何地执行(例 ...

  2. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  3. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  4. Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数

    上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...

  5. rxjs5.X系列 —— filter系列 api 笔记

    欢迎指导与讨论 :) 前言 本文是笔者翻译 RxJS 5.X 官网各类operation操作系列的的第二篇 -- filter转换.如有错漏,希望大家指出提醒O(∩_∩)O.更详细的资料尽在rxjs官 ...

  6. rxjs5.X系列 —— transform系列 api 笔记

    欢迎指导与讨论:) 前言 本文是笔者翻译 RxJS 5.X 官网各类operation操作系列的的第一篇 -- transform转换.如有错漏,希望大家指出提醒O(∩_∩)O.更详细的资料尽在rxj ...

  7. ASP.NET Web API 入门大杂烩

    [前言] 本文是大杂烩,意思即是:到处Copy再加一点点思考而混在一起的文章,引用来源因为太多太杂故而省略,望原作者原谅. [概述] ASP.NET Web API随ASP.NET MVC 4一起发行 ...

  8. rxjs5.X系列 —— Combination/Multicasting系列 api 笔记

    欢迎指导与讨论 :) 前言 本文是笔者翻译 RxJS 5.X 官网各类operation操作系列的的第三篇 -- Combination组合与Multicasting广播.如有错漏,希望大家指出提醒O ...

  9. angular2 学习笔记 ( rxjs 流 )

    RxJS 博大精深,看了好几篇文章都没有明白. 范围牵扯到了函数响应式开发去了... 我对函数式一知半解, 响应式更是第一次听到... 唉...不过日子还是得过...混着过先呗 我目前所理解的很浅,  ...

  10. RX系列一 | ReactiveX根源 | 观察者模式分析

    RX系列一 | ReactiveX根源 | 观察者模式分析 Rx的响应式编程算是很火了,对吧,但是我的工作基本上就不会接触,所以学习的比较晚,到现在才分享给大家,我们一点点的去学,当你看完这整个系列的 ...

随机推荐

  1. Linux 文件夹和文件操作【Linux 常用命令系列一】

    〇.前言 本文首先介绍了 Linux 中文件的结构,将全部文件夹罗列并介绍了大概的用途: 然后通过实例介绍了文件夹相关的常用操作,仅供参考. 一.Linux 系统的文件结构 列一下系统全部文件夹: / ...

  2. 基于协同过滤技术的网上书城设计实现(源码+lw+部署文档+讲解等)

    \n文末获取源码联系 感兴趣的可以先收藏起来,大家在毕设选题,项目以及论文编写等相关问题都可以给我加好友咨询 系统介绍: 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动 ...

  3. oeasy教您玩转vim - 15 - # 行内查找

    行头行尾 回忆上节课内容 上次学了直接跳到开头和结尾 最重要的就是 ^.$ ^ 到开头 $ 到结尾 I 相当于^i A 相当于$a 查找帮助 还有什么呢? 还是继续在 motion 里面 ^ .$ 之 ...

  4. Mac下浏览器跨域配置方法

    open -n /Applications/Google\ Chrome.app/ --args --disable-web-security --user-data-dir=/Users/hooli ...

  5. Less预处理器的使用

    练习页面: <body> <div class="div1"> <div class="div2"></div> ...

  6. python tesseract-ocr 图文识别 (windows基础环境搭建)

    python tesseract-ocr 图文识别 一,先进行Tesserocr安装下载 1,先点击进入下面的百度网盘链接: https://pan.baidu.com/s/1G5vZO2B4Mxx5 ...

  7. 【Spring】05 注解开发

    环境搭建 配置ApplicationContext.xml容器文件[半注解实现] <?xml version="1.0" encoding="UTF-8" ...

  8. 【OracleDB】 03 数据类型和常见对象概述

    我们可以通过PLSQL来查看Oracle的数据类型 总分类: - 字符型 1.CHAR 0 - 2000 字节 固定长度字符串 2.NCHAR 0 - 1000 字节 固定长度字符串[Unicode字 ...

  9. Deepin20系统开机报错——You are in emergency mode ... Cannot open access to console, the root account is locked. emergency mode/“journalctl -xb”

    参考: https://knowledge.ipason.com/ipKnowledge/knowledgedetail.html/1286 https://blog.csdn.net/wenfei1 ...

  10. windows10开启电源模式中的休眠选项

    使用管理员权限开启PowerShell,输入命令: powercfg -h on