根据条件变化debounceTime

Roh*_*hit 5 rxjs angular

是否可以将debounceTime值设置为根据条件更改的内容?我有一个行为主题设置如此(请告诉我,如果我甚至做这个部分错了):

this.searchSubject.asObservable().debounceTime(1000).subscribe(x => this.emitFilters())
Run Code Online (Sandbox Code Playgroud)

我希望基于某些过滤条件的去抖时间不同,但当我尝试在那里抛出一个函数时,VS Code会抱怨它无效.

我还看了debounce,它似乎采用了一种变量,但是从文档中,我似乎无法弄清楚(我投入的函数根据VS Code返回了错误的类型,即使我复制了来自文件代码).如果它有所作为,我正在Angular 2中做这一切.

Jes*_*ter 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 的工作示例。