Сотни HTTP-запросов с задержками между каждым - PullRequest
0 голосов
/ 09 сентября 2018

Мне нужно сделать сотни запросов HTTP к gated API, 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 голосов
/ 10 сентября 2018

Я думаю, что лучший вариант здесь - это оператор bufferCount, а затем delay для обеспечения минимальной задержки в 1 с.

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

0 голосов
/ 09 сентября 2018

используйте interval или timer операторов из rxjs

С таймером

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),
)
...