각각에 대해 관찰 가능한 서비스 메소드를 호출하는 것과 관련된 400 개 이상의 직원 객체를 처리해야합니다.RxJS를 사용하여 충돌없이 수백 건의 요청을 처리하는 방법은 무엇입니까?
모든 직원이 처리 된시기를 알아야하며, 클라이언트 또는 서버에 동시 요청이 과부하되지 않는 방법을 찾아야합니다. 즉, 현재 상황입니다.
각 직원의 처리 결과를 데이터로 작업 할 수있는 배열로 가져 오려고합니다 (내보내기 파일을 만듭니다).
것은 내가 RxJS에게 CONCAT 및 forkjoin 을 시도하고있다하지만, 난 여전히 모두 같은 시간에 떨어져 발사 400+ 작업을 갖고있는 것 같다.
I read this page에 대한 처리가 (현금 인출기에서 큐 등), 한번에 하나씩 처리하지만, 내가 확신 아니에요 제안는 CONCAT - 다시는 내 브라우저가 걸려와 네트워크의 수 요청이 동시에 나에게 제안되었습니다.
한 번에 한 명의 직원을 처리하고 그 목록의 다음 직원을 처리하기 전에 코드를 완성 할 수 있다면 좋을 것입니다.
processEmployees(): AsyncSubject<boolean> {
let employeesProcessed: AsyncSubject<boolean> = new AsyncSubject<boolean>();
let listOfProcessesToRun = [];
this.employeeProfilesList.forEach(
(employeeProfile: EmployeeProfile) => {
listOfProcessesToRun.push(
this.annualLeaveCalculationService.startProcess(employeeProfile, this.yearToProcess).delay(2000)
);
}
)
Observable.concat(listOfProcessesToRun)
.finally(() => {
})
.subscribe(
(calculationResults: AnnualLeaveCalculationResults) => {
this.calculationResults.push(calculationResults);
employeesProcessed.complete();
},
error => {
});
return employeesProcessed;
}
내가 관찰 가능한 배열을 처리 할 Observable.forkjoin를 사용하여 시도,하지만 난 요청을 병렬로 처리 있다고 생각하고, 그 때문에 거기에 매달려 내 컴퓨터 결과 약 400 명의 직원이 처리해야합니다.
중첩 된 솔루션을 고려했습니다.
processemployee(X) {
doServiceCall(this.employees[x])
.subscribe(response => {
processemployee(++x); // with a check to detect number of loops
}
);
}
그러나 나는 그것이 훌륭한 패턴이라고 확신하지 못합니다.
아, 감사합니다. 나는 지금 그것을 시도 할 것이고 나의 결과를 게시 할 것이다. 매우 감사! –
나는 1의 *** 동시 *** 값을 사용해야했다. 그렇지 않으면 반복되는 것처럼 보이는 외부 관찰 가능 출력과 같은 이상한 상황이 발생했다. 의심 할 여지없이 나는 병합 맵이하는 일에 대한 나의 이해를 연마 할 필요가있다. 그렇지 않으면 concurrent 매개 변수의 값이 1로 설정되어 있으므로 원하는대로 작동합니다. –