利用Promise和async/await实现以下功能: 现有一个接口https://test.com/get?id=1,需要发起id从1~200的GET方式调用200次异步请求,要求分20轮发出,前一轮全部完成后才进行下一轮,每轮同时并发请求为10次。 您的回答:
时间: 2024-01-21 11:02:21 浏览: 14
可以使用async/await和Promise来实现这个功能。首先,我们需要将请求分成20轮,每轮10个请求。然后,我们可以使用Promise.all()来等待所有请求完成,然后再进行下一轮请求。
下面是一个实现的示例代码:
```
async function makeRequests() {
const url = "https://test.com/get?id=";
const numRounds = 20;
const numRequestsPerRound = 10;
const totalRequests = numRounds * numRequestsPerRound;
let requestsCompleted = 0;
for (let i = 0; i < numRounds; i++) {
const roundStart = i * numRequestsPerRound + 1;
const roundEnd = (i + 1) * numRequestsPerRound;
const roundPromises = [];
for (let j = roundStart; j <= roundEnd; j++) {
const requestUrl = url + j;
roundPromises.push(fetch(requestUrl));
}
await Promise.all(roundPromises);
requestsCompleted += numRequestsPerRound;
console.log(`Completed ${requestsCompleted} requests`);
}
console.log("All requests completed");
}
makeRequests();
```
在这个示例中,我们使用了两个嵌套的for循环来生成请求的URL,并创建了一个包含所有请求的Promise数组。我们使用了await关键字来等待Promise.all()处理完所有请求,并记录了已完成的请求数。
当所有请求完成时,我们会在控制台输出"All requests completed"。