Rxjs:每隔X秒重复一次Ajax调用,但等待最后一次完成

sqw*_*qwk 2 rxjs ecmascript-6 rxjs5

我想在订阅自动调节器Observable时每隔x秒查询一次API,确保在发送另一个请求之前完成了最后一个请求.

let autoRefresher = new Observable().exhaustMap(() => Observable.defer(() => {
    return someService.returningAPromise();
}).timeout(refreshIntervalInMs).repeat());
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?如何在不创建新的observable的情况下更新刷新间隔?

mar*_*tin 7

我这样做:

import {Observable} from 'rxjs';

function doRequest() {
  if (Math.random() < 0.25) {
    return Observable.of('HTTP Response').delay(3000);
  } else {
    return Observable.of('HTTP Response');
  }
}

let autoRefresher = Observable.timer(0, 1000)
  .exhaustMap(doRequest)
  .subscribe(response => {
    console.log(response);
  });
Run Code Online (Sandbox Code Playgroud)

观看现场演示:http://plnkr.co/edit/7HAib10r6Vdl1x2U2wFS

这随机地造成3秒延迟.操作员timer()定期发出一个值.然后,exhaustMap()订阅前面的Observable并忽略在当前Observable完成之前发出的所有Observable.所以timer()发出价值,但这些被忽略了exhaust().

顺便说一句,请注意我正在使用TypeScript.