JavaScript如何使用promise实现分批请求
时间: 2023-12-16 11:03:24 浏览: 31
JavaScript 使用 Promise 可以方便地实现分批请求,以下是一个简单的示例:
```
// 定义请求的 url 列表
const urls = ['url1', 'url2', 'url3', 'url4', 'url5'];
// 定义每批请求数量
const batchSize = 2;
// 定义一个函数,用于发送一批请求
function sendBatchRequest(batch) {
return Promise.all(batch.map(url => fetch(url)));
}
// 分批发送请求
const batches = [];
for (let i = 0; i < urls.length; i += batchSize) {
batches.push(urls.slice(i, i + batchSize));
}
// 依次发送每批请求
let results = [];
batches.reduce((prevPromise, batch) => {
return prevPromise.then(() => {
return sendBatchRequest(batch)
.then(responses => {
// 处理响应结果
results = results.concat(responses);
})
.catch(error => {
// 处理错误
console.error(error);
});
});
}, Promise.resolve())
.then(() => {
// 处理所有响应结果
console.log(results);
});
```
上述代码中,我们首先将所有请求分成批次,每批请求数量为 batchSize。然后定义一个函数 sendBatchRequest,用于发送一批请求,并返回一个 Promise 对象。在分批发送请求的过程中,我们使用 reduce 方法依次发送每批请求,每次发送完成后,再等待上一批请求完成后再发送下一批请求。最终,我们可以在 then 方法中处理所有响应结果。
需要注意的是,Promise.all 方法只有在所有请求都成功返回时才会返回一个成功的 Promise 对象,如果其中任何一个请求失败,它将返回一个失败的 Promise 对象。如果我们需要在其中任何一个请求成功时就处理响应结果,可以使用 Promise.race 方法。