在去抖动和非去抖动的合并观测值上使用swichMap

时间:2018-08-21 04:27:37

标签: angular typescript merge rxjs observable

基本上,我有2个可观察值。

  1. obseravableClickBtn将立即发送请求

  2. observableInputText将在3秒内发送请求反跳。

代码:

obseravableClickBtn = Observable.fromEvent(Observable.fromEvent(document.getElementsById('btnSearch'), 'click')

observableInputText = Observable.fromEvent(this.textBoxInput1.nativeElement, 'keyup')
.merge(Observable.fromEvent(this.textBoxInput2.nativeElement, 'keyup')).debounceTime(3000)

observableInputText的3秒钟反跳期间,如果点击了btnSearch,我想取消observableInputText的观察并立即发送请求

我尝试使用:

const mergeObservable=obseravableClickBtn.merge(observableInputText).switchMap(
()=>sendRequest());

但是,如果我在输入后的3个反跳秒内单击btnSearch,则会发出2个请求。我一次只希望观察一次。还有其他类似的运算符功能吗?

1 个答案:

答案 0 :(得分:0)

您也可以尝试takeUntil运算符。

searchClick$: Subject = new Subject();
obseravableClickBtn.subscribe(() => {
   // button clicked
   searchClick$.next(true);
});



 observableInputText = Observable.fromEvent(this.textBoxInput1.nativeElement, 'keyup')
    .merge(Observable.fromEvent(this.textBoxInput2.nativeElement, 'keyup')).pipe(debounceTime(3000), takeUntil(searchClick$));