可观察-在一个轮询返回和另一个轮询开始之间设置恒定的延迟

时间:2019-04-30 08:08:34

标签: rxjs rxjs6

我想创建一个基于Observable的轮询器,该轮询器在上一个请求返回和下一个请求发出之间等待一定的时间。

这是我尝试的代码,但这设置了两次请求之间的延迟:

import {timer} from "rxjs";

    this.timer = timer(1, POLLING_INTERVAL)
     .pipe(concatMap(
        (_) => getData()
      )).subscribe((data) => {
        // do something with data     
      });

2 个答案:

答案 0 :(得分:1)

timer对此并不理想。而是将repeatWhendelay一起使用。

import { of } from 'rxjs';
import { repeatWhen, delay } from 'rxjs/operators';

getData().pipe(
  repeatWhen(notifications => notifications.pipe(
    delay(POLLING_INTERVAL),
  )),
).subscribe(...);

实时演示:https://stackblitz.com/edit/rxjs-2evzzi

答案 1 :(得分:0)

您必须将创建间隔用于: https://stackblitz.com/edit/typescript-ohddud?file=index.ts&devtoolsheight=100 或带有两个参数的计时器: https://stackblitz.com/edit/typescript-h9pzxr?file=index.ts&devtoolsheight=100

我希望您以正确的方式合并请求。