首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rxjs缓冲区不像我期望的那样使用节流阀。

rxjs缓冲区不像我期望的那样使用节流阀。
EN

Stack Overflow用户
提问于 2017-01-24 14:37:51
回答 2查看 948关注 0票数 1

我正试图在节流排放的基础上创建缓冲排放。下面的工作与RxJs 2中所期望的一样

代码语言:javascript
复制
.buffer(function() { return clickStream.throttle(250); })

这里是完整的jsfiddle示例

但是,当我试图在本地项目中使用它时,它会返回以下错误:

Uncaught :您提供了“() => clickStream.throttle(250)”,其中期望有一个流。您可以提供一个可观察的、许诺的、数组的或可迭代的。

这是我的密码

代码语言:javascript
复制
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)。

我还试图把它写成:

代码语言:javascript
复制
.buffer(clickStream.throttle(250))

它在单击按钮后引发另一个异常:

Uncaught : this.durationSelector不是函数

你能帮我理解一下这不对吗?

EN

回答 2

Stack Overflow用户

发布于 2017-01-24 15:15:18

您的问题在于,RxJs5是一个完整的重写,并且有许多破坏性的更改。其中许多是操作符的重命名或在不同操作符中分割操作符重载。

您的错误是由.throttle()引发的,在RxJs5中,该函数将在缓冲区关闭时返回一个可观察到的函数。您要寻找的重载已在RxJs5中重命名为.throttleTime()

为了这个原因,最好不要混淆不同版本的Rx。如果您打算开始使用RxJs5,请查看迁移指南,让您了解所做的事情。

票数 3
EN

Stack Overflow用户

发布于 2019-01-20 12:55:12

这就是我如何在RxJs5.5中实现的

代码语言:javascript
复制
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);
}))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41830912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档