是否可以将debounceTime值设置为根据条件更改的内容?我有一个行为主题设置如此(请告诉我,如果我甚至做这个部分错了):
this.searchSubject.asObservable().debounceTime(1000).subscribe(x => this.emitFilters())
Run Code Online (Sandbox Code Playgroud)
我希望基于某些过滤条件的去抖时间不同,但当我尝试在那里抛出一个函数时,VS Code会抱怨它无效.
我还看了debounce,它似乎采用了一种变量,但是从文档中,我似乎无法弄清楚(我投入的函数根据VS Code返回了错误的类型,即使我复制了来自文件代码).如果它有所作为,我正在Angular 2中做这一切.
您在哪里看到建议 .debounceTime 接受函数的文档?此处有详细记录,带有以下签名:
public debounceTime(dueTime: number, scheduler: Scheduler): Observable
Run Code Online (Sandbox Code Playgroud)
您正在寻找的方法是debounce,根据文档:
Emits a value from the source Observable only after a particular time span determined by another Observable has passed without another source emission.
It's like debounceTime, but the time span of emission silence is determined by a second Observable.
Run Code Online (Sandbox Code Playgroud)
这是它的签名:
public debounce(durationSelector: function(value: T): Observable | Promise): Observable
Run Code Online (Sandbox Code Playgroud)
因此,要完成您所追求的行为,您所要做的就是设置另一个 Observable,它将提供去抖的时间间隔。
您可以使用另一个主题来执行此操作,您可以根据应用程序逻辑调用 .next() 以提供新的等待期。
let debounceSubject = new Subject<number>();
let debounceObservable$ = debounceSubject.asObservable();
// Somewhere else in code you'll do debounceSubject.next(1000); for example
Run Code Online (Sandbox Code Playgroud)
最后,您将像这样设置新的去抖动:
this.searchSubject.asObservable()
.debounce(() => debounceObservable$).subscribe(x => this.emitFilters())
Run Code Online (Sandbox Code Playgroud)
更多使用 .debounce 的例子可以在这里找到(学习 rxjs 的好网站),包括 jsBin 和 jsFiddle 的工作示例。
| 归档时间: |
|
| 查看次数: |
1765 次 |
| 最近记录: |