Javascript rxjs缓冲区没有';我不能像预期的那样使用油门
我试图基于节流排放创建缓冲排放。以下工作与《RxJs 2》中的预期一样:Javascript rxjs缓冲区没有';我不能像预期的那样使用油门,javascript,rxjs,rxjs5,Javascript,Rxjs,Rxjs5,我试图基于节流排放创建缓冲排放。以下工作与《RxJs 2》中的预期一样: .buffer(function() { return clickStream.throttle(250); }) 但是,当我尝试在本地项目中使用它时,它返回以下错误: 未捕获类型错误:您提供了“()=>clickStream.throttle(250)”,其中需要一个流。您可以提供一个可观察的、承诺的、数组的或可观察的 这是我的密码 import Rx from 'rxjs/Rx'; const $button =
.buffer(function() { return clickStream.throttle(250); })
但是,当我尝试在本地项目中使用它时,它返回以下错误:
未捕获类型错误:您提供了“()=>clickStream.throttle(250)”,其中需要一个流。您可以提供一个可观察的、承诺的、数组的或可观察的
这是我的密码
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不是函数
你能帮我理解它的错误吗?你的问题在于RxJs5是一个完全重写,并且有很多破坏性的更改。其中许多是重命名运算符或拆分不同运算符中的运算符重载 您的错误是由
.throttle()
引发的,在RxJs5中,它使用一个函数返回缓冲区应该关闭时的可观察值。您正在查找的重载已在RxJs5中重命名为.throttleTime()
最好不要因为这个原因而混用不同版本的Rx。如果您打算开始使用RxJs5,请查看,让您了解到它的用途。这就是我在RxJs5.5中实现的方法
import { buffer, throttleTime, map, filter } from "rxjs/operators";
const clickStream = Observable.fromEvent(button$, 'click');
this.subscriptions.add(clickStream
.pipe(
buffer(clickStream.pipe(throttleTime(500))),
map(arr => arr.length),
filter(len => len === 4)
)
.subscribe(resp => {
console.log('clicked', resp);
}))
使用而不是throttle
。buffer(clickStream.throttleTime(250))应该完成这项工作。