RXJS:属性animationFrame不存在于调度程序类型上

时间:2017-10-07 04:21:14

标签: javascript rxjs observable scheduler requestanimationframe

尝试使用RXJS和Scheduler。最后,我希望在滚动事件上有一个请求动画帧。

问题: 我收到类型错误:属性animationFrame不存在于调度程序类型

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/fromEvent';
import 'rxjs/add/observable/of';
import 'rxjs/add/observable/timer';
import 'rxjs/add/operator/repeat';
import 'rxjs/add/operator/takeUntil';
import { Scheduler } from 'rxjs/Scheduler';

Observable
          .of(0, Scheduler.animationFrame) // error here
          .repeat()
          .takeUntil(Observable.timer(1000))
          .subscribe(() => console.log(x++));

enter image description here

问题:

如何识别animationFrame?

3 个答案:

答案 0 :(得分:5)

由于rxjs@6.0.0 animationFrame已重命名为animationFrameScheduler,因此必须从rxjs导入。

import { animationFrameScheduler } from 'rxjs';

答案 1 :(得分:4)

如果您想使用AnimationFrameScheduler,则需要导入它。 Scheduler是一般调度程序类。见https://github.com/ReactiveX/rxjs/blob/master/src/scheduler/animationFrame.ts

import { animationFrame } from 'rxjs/scheduler/animationFrame';

然后像这样使用它:

Observable.of(0, animationFrame)

答案 2 :(得分:1)

它可能有点令人困惑,但顶级导出Schedulerrxjs/Scheduler是不同的 - 先前对象包含要使用的调度程序的实例,后者是用于实例化它们的类。所以要获得animFrame调度程序实例,

import { animationFrame } from 'rxjs/scheduler/animationFrame';

我已根据评论建议编辑了答案,因为建议最好直接导入个人而不是从顶级导入某些内容。一旦进行顶级导入,它将进行所有操作员修补等,立即加载整个库,因此需要谨慎使用。 (或者更好的不是一般)。