如何在一个Observable上使用多个debounceTime?

时间:2016-11-28 22:11:39

标签: angular rxjs angular2-observables

我有一个输入html元素并使用Observables执行基本类型提前搜索功能:

代码:

   @Output() keywordChange = new EventEmitter();

   this.keyword$ = Observable.fromEvent(myInput, 'keyup');
    this.keyword$
      .map((event: any) => event.target.value)
      .debounceTime(200)
      .subscribe(keyword => this.keywordChange.emit(keyword));

所以基本上我正在捕获每个键盘之间至少200毫秒键入的任何关键字。

现在我想保存用户在cookie中搜索的内容,以便向他们显示“您的最新搜索”,但我想在保存前等待3000毫秒 键入的值。

我知道下面的代码不起作用,只是为了说明,我想要实现类似的东西:

    this.keyword$
      .map((event: any) => event.target.value)
      .debounceTime(200)
      .subscribe(keyword => this.keywordChange.emit(keyword))
      .debounceTime(3000)
      .subscribe(keyword => addKeyWordToLatestSearches(keyword));

这种方式是否可行,将运营商用不同的debounceTimes做多个事情?

1 个答案:

答案 0 :(得分:1)

您是否希望share初始订阅有可能以两种独立的方式处理发出的数据?由于您不想在原始源上订阅两次,因此可以使用RxJS的share operator

const keyupValue$ = this.keyword$
  .map((event: any) => event.target.value)
  .share();

keyupValue$
  .debounceTime(200)
  .subscribe(keyword => this.keywordChange.emit(keyword))

keyupValue$ 
  .debounceTime(3000)
  .subscribe(keyword => addKeyWordToLatestSearches(keyword));
相关问题