RXJS。每隔几秒钟即可从媒体流中获取价值

时间:2019-10-18 22:56:58

标签: javascript rxjs reactive-programming

我目前有一个可观察到的(称为videoStreams.currentTime $),它发出视频播放器的当前位置的时间少于每秒。如何获得当前时间(可观察到的值),但是每5秒左右一次?

这是我得到的最接近的值,但是每次发出值时,发出结果的次数都会增加。

const int = interval(5000);

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

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

改用switchMap

“ switchMap和其他展平运算符之间的主要区别是取消效果。在每次发射时,先前的内部可观察项(您提供的函数的结果)都会被取消,并且新的可观察项将被订阅。” read more on switchMap < / p>

stackblitz example

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));
      }
}

答案 1 :(得分:0)

使用以下命令证明很简单

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

它不是通过每隔三分之一秒的时间返回玩家的位置,而是通过节流返回该时间点的值(我分配给它)。