我需要对一个封闭的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));
}
答案 0 :(得分:2)
使用rxjs中的interval
或timer
运算符
带计时器
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