Javascript rxjs缓冲区没有';我不能像预期的那样使用油门

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 =

我试图基于节流排放创建缓冲排放。以下工作与《RxJs 2》中的预期一样:

.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))应该完成这项工作。