基本上,我有2个可观察值。
obseravableClickBtn
将立即发送请求
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个请求。我一次只希望观察一次。还有其他类似的运算符功能吗?
答案 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$));