angular - 为什么 rxjs debounceTime 不适用于使用“of”运算符创建的可观察对象?
问题描述
使用angular 7
和rxjs 6
:
<input (input)="onChange($event.target.value)">
为什么以下不去抖动?
onChange(val: string) {
of(val)
.pipe(
debounceTime(300)
).subscribe(valx => {
console.log(valx);
});
}
但这确实:
searchTerm$: Subject<string> = new Subject();
this.searchTerm$.pipe(
debounceTime(300),
).subscribe(val => {
console.log(val);
});
onChange(val: string) {
this.searchTerm$.next(val);
}
解决方案
这不是因为of()
。在您的第一个示例中,每次调用时,onChange($event.target.value)
您都在创建一个具有自己debounceTime
和自己的计时器的新链。所以它永远不会去抖动任何东西,因为每个输入更改都有自己的链。
但是,如果您使用Subject
(如在第二个示例中)并推送所有事件,this.searchTerm$.next(val)
那么您只有一个链,其中每个事件都被推送到顶部,然后按照您的预期去抖动。
推荐阅读
- jquery - 克隆标题的第一个字母
- python - 如果在 flask/html/python 中未选中复选框,则禁用提交按钮
- c# - 为什么我不能在 C# 运行时将相同的面板添加到流布局面板?
- python - python - 如何计算python中numpy数组中n个元素的总和?
- graph-databases - Gremlin 查询展平嵌套顶点
- flutter - 如何在 Flutter 上实现从右到左出现的侧边栏菜单?
- c - (仅限 C)将特殊字符从字符串 char 转换为 Hex。统一码
- java - java.lang.IndexOutOfBoundsException:索引:1,大小:1 onBindViewHolder
- postgresql - Postgres - 内置的自动和动态分区
- jquery - 使用用户复选框值过滤 jqgrid 表?