如何等待ajax完成然后在rxjs中重新触发ajax

时间:2018-09-28 07:55:08

标签: rxjs

我是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()); 

1 个答案:

答案 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的观察