rxjs 节流 this.durationSelector 不是函数
Posted
技术标签:
【中文标题】rxjs 节流 this.durationSelector 不是函数【英文标题】:rxjs throttle this.durationSelector is not a function 【发布时间】:2017-02-27 15:37:48 【问题描述】:我正在尝试使用以下代码 throttle
ngrx 存储操作更新事件
import 'rxjs/add/operator/throttle'
import Dispatcher, Store from '@ngrx/store';
...
static get parameters()
return [[Dispatcher]];
constructor(actions$)
...
this.actions$
.filter(action => action.type === this.Actions[`LOAD_USERS_REQUEST`])
.throttle(1000 /* ms */)
.subscribe(() =>
...
);
这会给我一个错误
在 ThrottleSubscriber.tryDurationSelector (throttle.js:80) 类型错误: this.durationSelector 不是函数
当我将 .throttle(1000)
替换为 .throttle(() => 1000)
时,它会抛出一个不同的错误,清楚地表明油门需要一个功能,而不是我提供的那个。但我想知道为什么因为文档状态油门需要一个数字值。
https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/throttle.md
【问题讨论】:
将此添加到您的导入中import 'rxjs/add/operator/throttle'
我当然这样做了,否则它甚至在进入油门功能之前就崩溃了
试过throttleWithTimeout而不是throttle?
【参考方案1】:
您在 https://github.com/Reactive-Extensions/RxJS 上引用的文档页面与 RxJS 4 相关。由于您使用的是 Angular2,因此您使用的是 RxJS 5。
操作员throttle()
期望作为参数一个 Observable 或 Promise。
运算符throttleTime()
以毫秒为单位作为参数时间。
所以你应该使用throttleTime(1000)
。
请注意,使用.throttle(() => 1000)
是非常不同的。您传递一个匿名函数,它直接返回 1000
而不是 1000
数字。这就是它引发不同错误的原因。
【讨论】:
搜索的附加说明:这同样适用于 RxJS 5 中的debounce()
和 debounceTime()
。
另见learnrxjs.io/operators/filtering/throttletime.html以上是关于rxjs 节流 this.durationSelector 不是函数的主要内容,如果未能解决你的问题,请参考以下文章
Angular使用总结 --- 搜索场景中使用rxjs的操作符
rxjs-tslint vs rxjs-tslint-rules 包