100个HTTP请求,每个请求之间有延迟

时间:2018-09-09 02:12:58

标签: angular typescript http rxjs wait

我需要对一个封闭的API发出100个http请求,每秒5个请求。将Angular 6与CLI和RXjs一起使用。在Node.js服务器上,我知道如何使用请求重试NPM软件包来执行此操作。如何使用Angular 6做到这一点?

我知道如何发出单个请求,或者如何发出许多请求,但是我如何插入时间延迟,以便每秒仅发出5个请求?

getApps(luisAuthoringKey:string): Observable<any> {

  this.httpOptions.headers.set("Ocp-Apim-Subscription-Key",luisAuthoringKey);

  return this.http.get(this.endpoint + 'apps', this.httpOptions).pipe(
    map(this.extractData));
}

2 个答案:

答案 0 :(得分:2)

使用rxjs中的intervaltimer运算符

带计时器

this.http.get(this.endpoint + 'apps', this.httpOptions).pipe(
  map(this.extractData),
  timer(200),
  catchError(e=>of(e)),
  repeat(100),
)

有间隔

interval(200).pipe(
  this.http.get(this.endpoint + 'apps', this.httpOptions),
  map(this.extractData),
  catchError(e=>of(e)),
  take(100),
)

答案 1 :(得分:0)

我认为这里最好的选择是bufferCount运算符,然后是delay以确保最小的1s延迟。

from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
  .pipe(
    concatMap(v => of(v).pipe(delay(120))),
    bufferCount(5),
    concatMap(buffer => of(buffer).pipe(delay(1000)))
  )
  .subscribe(console.log);

实时演示:https://stackblitz.com/edit/rxjs6-demo-k5wins?file=index.ts