美文网首页
什么是 Rxjs 的 subscription

什么是 Rxjs 的 subscription

作者: _扫地僧_ | 来源:发表于2021-12-05 08:39 被阅读0次

    什么是订阅? 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的原创文章,尽在:"汪子熙":


    相关文章

      网友评论

          本文标题:什么是 Rxjs 的 subscription

          本文链接:https://www.haomeiwen.com/subject/rdwqzltx.html