我是rxjs的新手,我想做一个简单的功能,使按钮的每个click事件都会发送一个ajax,而当prev ajax不响应该按钮时,它只会返回
在纯js中,我只是设置一个标志来检查ajax是否完成,但是我知道如何在rxjs中执行此功能。
像这样的纯js代码
let flag = false;
let el = document.querySelector("#btn");
el.addEventListener("click",handleBtn);
let handleBtn = () => {
if(flag) return; // if ajax no response then return
fakeAjaxCall().then(
val => flag = true,
reason => console.log(reason)
)
}
也许在rxjs中是这样的,
import { Observable, Subject, ReplaySubject, from, of, range } from "rxjs/Rx";
const btn$ = Observable.fromEvent(
this.refs["btn"],
"click"
).subscribe(fakeAjaxCall());
答案 0 :(得分:0)
您需要使用exhaustMap。 因此,对于您来说,它是:
import { Observable, Subject, ReplaySubject, from, of, range } from "rxjs/Rx";
const btn$ = Observable.fromEvent(
this.refs["btn"],
"click"
).pipe(exhaustMap(() => fakeAjaxCall())
.subscribe();
它将忽略来自button$
的所有发射,直到无法完成来自exhaustMap
的观察