I tried using delay(50) on each API call, but I still get 429 Too Many Requests. Back-end is Laravel, what’s the best way to prevent this in Angular or should this be handled by back-end Laravel?
My code look like this
export class PdoProgramComponent implements OnInit {
ngOnInit() {
this.loadPdoPrograms();
}
// Load all PDO programs from DB
loadPdoPrograms() {
this.isLoading = true;
this.pdoService.getAssigendPdos().pipe(
take(1),
map(res => this.sortPdosByName(res.results.pdos)),
switchMap(pdos => this.validatePdoPrograms(pdos)),
catchError(err => {
this.showAlertSavingFailed();
return of([]);
})
).subscribe({
next: (pdos: Pdo[]) => this.pdos = pdos,
complete: () => this.isLoading = false
});
}
validatePdoPrograms(pdos: Pdo[]): Observable<Pdo[]> {
return from(pdos).pipe(
concatMap(pdo => of(pdo).pipe(
delay(50), // Delay each call by 50 milliseconds
switchMap(() => this.pdoService.getSpecificPdoAdvocaiesPrograms(pdo.id).pipe(
take(1),
map(res => {
const pdo_advocacies = res.results.pdo?.pdo_advocacies;
pdo.editRequiredCount = 0;
pdo_advocacies.forEach(advocacy => {
if (advocacy.advocacy !== 'Unrestricted') {
pdo.editRequiredCount += advocacy.pdo_programs.filter(
program => program.admin_advocacies.length === 0 ||
!program.admin_beneficiary_category ||
!program.program_category
).length;
}
});
return pdo;
})
))
)),
toArray()
);
}
}