diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json index a7aec3f2d6..73604f63ef 100644 --- a/plugins/azure-devops-backend/package.json +++ b/plugins/azure-devops-backend/package.json @@ -27,6 +27,7 @@ "azure-devops-node-api": "^11.0.1", "express": "^4.17.1", "express-promise-router": "^4.1.0", + "p-limit": "^3.1.0", "winston": "^3.2.1", "yn": "^4.0.0" }, diff --git a/plugins/azure-devops-backend/src/api/PullRequestsDashboardProvider.ts b/plugins/azure-devops-backend/src/api/PullRequestsDashboardProvider.ts index 9bb53637f7..7ddfc0c7ff 100644 --- a/plugins/azure-devops-backend/src/api/PullRequestsDashboardProvider.ts +++ b/plugins/azure-devops-backend/src/api/PullRequestsDashboardProvider.ts @@ -23,6 +23,7 @@ import { import { AzureDevOpsApi } from './AzureDevOpsApi'; import { Logger } from 'winston'; +import limiterFactory from 'p-limit'; export class PullRequestsDashboardProvider { private teams = new Map(); @@ -58,33 +59,40 @@ export class PullRequestsDashboardProvider { this.teams = new Map(); this.teamMembers = new Map(); + const limiter = limiterFactory(5); + await Promise.all( - teams.map(async team => { - const teamId = team.id; + teams.map(team => + limiter(async () => { + const teamId = team.id; - if (teamId) { - const teamMembers = await this.azureDevOpsApi.getTeamMembers(team); + if (teamId) { + const teamMembers = await this.azureDevOpsApi.getTeamMembers(team); - if (teamMembers) { - team.members = teamMembers.reduce((arr, teamMember) => { - const teamMemberId = teamMember.id; + if (teamMembers) { + team.members = teamMembers.reduce((arr, teamMember) => { + const teamMemberId = teamMember.id; - if (teamMemberId) { - arr.push(teamMemberId); - const memberOf = [ - ...(this.teamMembers.get(teamMemberId)?.memberOf ?? []), - teamId, - ]; - this.teamMembers.set(teamMemberId, { ...teamMember, memberOf }); - } + if (teamMemberId) { + arr.push(teamMemberId); + const memberOf = [ + ...(this.teamMembers.get(teamMemberId)?.memberOf ?? []), + teamId, + ]; + this.teamMembers.set(teamMemberId, { + ...teamMember, + memberOf, + }); + } - return arr; - }, [] as string[]); + return arr; + }, [] as string[]); - this.teams.set(teamId, team); + this.teams.set(teamId, team); + } } - } - }), + }), + ), ); }