RXJS. Получайте значение из медиа потока каждые несколько секунд - PullRequest
1 голос
/ 19 октября 2019

В настоящее время у меня есть наблюдаемая (называемая videoStreams.currentTime $), которая излучает текущую позицию видеопроигрывателя меньше, чем каждую секунду. Как я могу получить текущее время (значение, излучаемое наблюдаемой), но только каждые 5 секунд или около того?

Это самое близкое, что я получил, но количество раз, которое излучается результат, увеличивается свремя выдачи значения.

const int = interval(5000);

const subscription = int
  .pipe(flatMap(() => videoStreams.currentTime$))
  .subscribe(val => console.log("TIME", val));

Буду признателен за любую помощь

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Оказалось, что это просто, используя следующее

 const curTime$ = videoStreams.currentTime$.pipe(
  throttle(() => interval(10000))
);

Вместо того, чтобы возвращать позицию игрока каждую треть секунды или около того, он возвращает значение в определенный момент времени (который я назначаюк нему), дросселируя его.

0 голосов
/ 19 октября 2019

Используйте switchMap вместо

"Основное различие между switchMap и другими операторами выравнивания заключается в эффекте отмены. При каждом излучении предыдущая внутренняя наблюдаемая (результат предоставленной вами функции) отменяется, а новаяobservable подписан. " подробнее на switchMap

Пример стекаблиц

import { Component } from '@angular/core';
import { interval,of } from 'rxjs';
import { flatMap,switchMap } from 'rxjs/operators';
@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  name = 'Angular';
  currentTime$ = of(1,2,3,4,5,6,7,8)
  ngOnInit() {
    const int = interval(5000);

    const subscription = int
      .pipe(switchMap(() => this.currentTime$ ))
      .subscribe(val => console.log("TIME", val));
      }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...