什么是 Rxjs 的 subscription
什么 Rxjs
2023-09-14 09:04:00 时间
什么是订阅? Subscription 是一个对象,该对象代表一个一次性资源,通常是一个 Observable 的执行。 Subscription 有一个重要的方法,unsubscribe,它不接受任何参数,只处理订阅持有的资源。 在之前的 RxJS 版本中,订阅被称为“Disposable”。
看个例子:
import { interval } from 'rxjs';
const observable = interval(1000);
const subscription = observable.subscribe((x) => console.log(x));
// Later:
// This cancels the ongoing Observable execution which
// was started by calling subscribe with an Observer.
console.log('ok');
const handler = () => subscription.unsubscribe();
setTimeout( handler , 10000);
这行代码将在打印0~9 个数字后,也就是10秒后终止。
Subscription 本质上只有一个 unsubscribe() 函数来释放资源或取消 Observable 执行,避免内存泄漏。
也可以将一个 subscription 添加到另一个 subscription 里,然后同时关闭这两个 subscription:
import { interval } from 'rxjs';
const observable1 = interval(400);
const observable2 = interval(300);
const subscription = observable1.subscribe(x => console.log('first: ' + x));
const childSubscription = observable2.subscribe(x => console.log('second: ' + x));
subscription.add(childSubscription);
setTimeout(() => {
// Unsubscribes BOTH subscription and childSubscription
subscription.unsubscribe();
}, 1000);
在 SAP Spartacus 代码里,有时我们能看到手动新建一个新的 subscription:
原因正在于此:
将若干个 subscription 添加到同一个 subscription:
这样,在 Component 的 ngOnDestroy 方法里,我们就能用一个 subscription,通过调用一次 unsubscribe 就能关掉所有的子订阅了。
更多Jerry的原创文章,尽在:“汪子熙”:
相关文章
- 物理引擎中velocity的单位是个什么鬼?
- lxcfs 是什么? 怎样通过 lxcfs 在容器内显示容器的 CPU、内存状态
- php自动加载机制是什么
- 网线中的5类线、超5类线、6类线有什么区别?
- 什么是Nacos?Nacos注册配置中心介绍
- 什么是 StackBlitz 的 web container
- 云主机是什么?
- 从一个实际的例子出发,理解什么是 Rxjs 的 defer 函数
- 我能贡献什么
- 问答插件的用户表什么作用?
- 软件测试(各阶段)刚入行不知道干些什么?字节大佬5000字真言送给你!
- 需要学什么?从手工测试到自动化测试的进阶过程…
- 什么才是程序员的核心竞争力?zz
- Oracle启动中,spfile.ora、init<SID>.ora、spfile<SID>.ora 这三个文件正确的先后顺序是什么?
- struts2中,Action通过什么方式获得用户从页面输入的数据,又是通过什么方式把其自身的数据传给视图的?
- 什么是多线程?如何实现多线程?
- 计算机视觉研究方向有哪些?CV是做什么的?
- 擎创动态 | 十天拿下12项信创认证,入选2022智能运维企业TOP50榜单,这个公司到底什么来头