How to unsubscribe/stop Observable?

前端 未结 3 1499
北海茫月
北海茫月 2020-12-17 01:30

I use the following code for timer:

export class TimerService {
  private ticks: number = 0;
  private seconds: number = 0;
  private timer;

  constructor(s         


        
相关标签:
3条回答
  • 2020-12-17 02:00

    The subscribe method returns a Subscription object, which you can later use to stop listening the stream contained by the observable to which you subscribed.

    import { ISubscription } from 'rxjs/Subscription':
    import { TimerObservable } from 'rxjs/observable/TimerObservable';
    
    export class TimerService {
      private ticks = 0;
      private timer$: TimerObservable;
      private $timer : ISubscription;
    
      constructor(private seconds = 0) {
        this.timer$ = TimerObservable.create(2000, 1000);//or you can use the constructor method
        this.$timer = this.timer.subscribe(t => {
          this.ticks = t;
          this.disactivate();
        });
      }
    
      private disactivate() {
        if (this.ticks >= this.seconds) {
          this.$timer.unsubscribe();
        }
      }
    }
    

    Its important to notice that unsubscribe exist in rxjs (version 5 and up), before that, in rx (version lower than 5, a different package) the method was called dispose

    0 讨论(0)
  • 2020-12-17 02:02

    So after some PUNISHING research I've added my own npm library for this problem.

    Improves previous answer by NOT having to add any extra convolution variables and ease of use.

    • StackBlitz
    • Repo
    • NPM

    0 讨论(0)
  • 2020-12-17 02:18

    The best way is to unsubscribe when instance is destroyed.

    ngOnDestroy() {
     this.sub.unsubscribe();
    }
    
    0 讨论(0)
提交回复
热议问题