是否可以将debounceTime值设置为根据条件更改的内容?我有一个行为主题设置如此(并告诉我,如果我甚至做这部分错误):
this.searchSubject.asObservable().debounceTime(1000).subscribe(x => this.emitFilters())
我希望基于某些过滤条件的去抖时间不同,但是当我尝试在那里抛出一个函数时,VS Code会抱怨它无效。
我还看了一下debounce,它似乎采用了一种变量,但从文档中,我似乎无法弄清楚(我投入的函数根据VS Code返回了错误的类型,甚至虽然我从文档中删除了代码)。如果它有所作为,我正在Angular 2中做这一切。
答案 0 :(得分:3)
你在哪里看到的文档表明.debounceTime会接受一个函数?它有详细记录here,具有以下签名:
public debounceTime(dueTime: number, scheduler: Scheduler): Observable
您正在寻找的方法是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.
这是签名:
public debounce(durationSelector: function(value: T): Observable | Promise): Observable
所以,你要做的就是设置另一个Observable,它将提供去抖动的间隔。
您可以使用另一个主题来执行此操作,您可以根据应用程序逻辑调用.next()以提供新的等待时间。
let debounceSubject = new Subject<number>();
let debounceObservable$ = debounceSubject.asObservable();
// Somewhere else in code you'll do debounceSubject.next(1000); for example
最后你会像这样设置新的辩护:
this.searchSubject.asObservable()
.debounce(() => debounceObservable$).subscribe(x => this.emitFilters())
使用.debounce的更多示例可以找到here(学习rxjs的好网站),包括jsBin和jsFiddle的工作示例。