Saya sedang mengerjakan pemutar video dengan dua cara berbeda untuk mengetahui apakah sebuah observable harus dilanggankan atau tidak. mereka adalah _videoInfo$ dan _exit$. Mereka adalah aliran yang memancarkan nilai saat dipanggil pada pemutar.

Saya memiliki _data$ yang dapat diamati, yang memancarkan semua nilai yang perlu saya lacak, tetapi saya hanya ingin berlangganan saat pemutar video diputar.

Saya tahu bahwa pendekatan berikut ini salah, tetapi ini menjelaskan apa yang saya coba capai. Saat ini tidak berfungsi, karena saya tidak dapat berhenti berlangganan dari _data$.

 const _data$ = data$.subscribe(event => {
  // data I need when video is playing
});

_videoInfo$.subscribe((res): void => {
  // when res emits it means a new video is starting
  _data$.subscribe();
});

_exit$.subscribe({
 next: () => {
  _data.unsubscribe(); // this does not work, but i want to unsubscribe here
 },
 error: () => {},
 complete: () => {}
});

Bagaimana saya bisa berlangganan _data$ ketika $videoInfo memancarkan nilai dan berhenti berlangganan ketika _exit$ memancarkan nilai?

1
jschuss 28 Oktober 2019, 06:37

2 jawaban

Jawaban Terbaik

observable.subscribe() mengembalikan objek Subscription yang dapat Anda gunakan untuk berhenti berlangganan.

let subscription;

_videoInfo$.subscribe((res): void => {
  // when res emits it means a new video is starting
  subscription = _data$.subscribe();
});

_exit$.subscribe({
 next: () => {
  if (subscription) {
   subscription.unsubscribe(); 
  }
 },
 error: () => {},
 complete: () => {}
});
1
Kirill Simonov 28 Oktober 2019, 03:50

Cara operator:

_data$.pipe(skipUntil($videoInfo),takeUntil(_exit$)).subscribe()
1
Fan Cheung 28 Oktober 2019, 04:32