我有一个输入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做多个事情?
答案 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));