所以我修改了代码。现在,这两个请求主体通过一个数组合并为一个主体。每3秒发送一组请求主体以及url:
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Subject, Subscriber, Observable } from 'rxjs';
import { debounceTime } from 'rxjs/operators/debounceTime';
import { buffer } from 'rxjs/operators/buffer';
interface ReportRunStatus {
status: any;
}
interface RequestWithObserver {
request: number;
observer: Subscriber<ReportRunStatus>;
}
const DEBOUNCE_TIME = 3000;
@Injectable()
export class WelcomeService {
private requests = new Subject<RequestWithObserver>();
private bufferTrigger = new Subject<null>();
private requestBuffer = this.requests.pipe(buffer(this.bufferTrigger.pipe(debounceTime(DEBOUNCE_TIME))));
constructor(
private http: HttpClient
) {
this.subscribeBufferRequests();
}
public getConfig(id: number) {
return new Observable((observer) => {
this.bufferTrigger.next(null);
this.requests.next({
request: id,
observer
});
});
}
public subscribeBufferRequests() {
this.requestBuffer.subscribe((requests) => {
const requestsData = requests.map((r) => r.request);
this.http.post('getMovie', requestsData).subscribe((response) => {
requests.forEach((requestItem, i) => {
requestItem.observer.next(response[i]);
});
});
});
}
}