javascript - 如何停止去抖动的 Rxjs Observable?
问题描述
我创建了一个 observable,它将在最后一次更改后 3 秒触发,并调用publishChange
服务。它可以工作,但我想创建一个doImmediateChange
函数,它publishChange
立即调用并停止去抖动的 observable。这怎么可能?
我的组件:
class MyComponent {
private updateSubject = new Subject<string>();
ngOnInit() {
this.updateSubject.pipe(
debounceTime(3000),
distinctUntilChanged()
).subscribe(val => {
this.srv.publishChange(val);
});
}
doChange(val: string) {
this.updateSubject.next(val);
}
doImmediateChange(val: string) {
// Stop the current updateSubject if debounce is in progress and call publish immediately
// ??
this.srv.publishChange(val);
}
}
解决方案
debounceTime
您可以使用switchMap
和进行模拟delay
。然后取消内部 ObservabletakeUntil
以防止发出等待值。
private updateSubject = new Subject<string>();
private interrupt = new Subject();
ngOnInit() {
this.updateSubject.pipe(
switchMap(val => of(val).pipe(
delay(3000),
takeUntil(this.interrupt)
))
).subscribe(val => publish(val));
}
doChange(val: string) {
this.updateSubject.next(val);
}
doImmediateChange(val: string) {
this.interrupt.next();
publish(val);
}
推荐阅读
- google-apps-script - 为什么 GAS 会在数据验证中输入无效范围?
- r - R:我正在尝试将 rollmean(zoo) 应用于列表中的几个数据框中的特定列
- evernote - 如何通过 Evernote API 访问我的个人数据?
- r - 如何使这个 ggplot 中的条与 gganimate 一起出现?
- python - 在 Python 中提取 JSON 文本文件中的值
- c# - 动态 LINQ 查询到表达式树
- python - 从 Pandas 列中删除字符。Str.replace() 不工作
- javascript - 如何仅通过将鼠标悬停在父项上来设置样式子项?
- r - 在 R 中有效地保留数组维度
- ios - NFC 在 Apple Pay 唤醒之前打开自定义应用程序