zl程序教程

您现在的位置是:首页 >  其它

当前栏目

什么是 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的原创文章,尽在:“汪子熙”: