【发布时间】:2017-06-09 09:54:19
【问题描述】:
我正在尝试基于节流排放创建缓冲排放。以下在 RxJs 2 中按预期工作:
.buffer(function() { return clickStream.throttle(250); })
但是当我尝试在本地项目中使用它时,它会返回以下错误:
未捕获的类型错误:您在预期流的位置提供了 '() => clickStream.throttle(250)'。您可以提供 Observable、Promise、Array 或 Iterable。
这是我的代码
import Rx from 'rxjs/Rx';
const $button = document.getElementById('button');
const $label = document.getElementById('label');
const clickStream = Rx.Observable.fromEvent($button, 'click');
const doubleClickStream = clickStream
.buffer(() => clickStream.throttle(250))
.map(arr => arr.length)
.filter(len => len === 2)
clickStream.subscribe(x=>console.log(x));
doubleClickStream
.subscribe(() => $label.textContent = 'double click')
//
doubleClickStream
.throttle(1000)
.subscribe(() => $label.textContent = '-')
我知道我目前对这个库的了解还不够,可能它与 rxjs 版本有关(在工作示例中它是 2.x,而在我上面的代码中它是 5.x)。
我也试着写成:
.buffer(clickStream.throttle(250))
点击按钮后又引发了另一个异常:
未捕获的类型错误:this.durationSelector 不是函数
你能帮我理解这是错的吗?
【问题讨论】:
-
使用throttleTime 而不是
throttle -
.buffer(clickStream.throttleTime(250)) 应该可以完成这项工作。
标签: javascript rxjs rxjs5