我使用 JavaScript 发送大约 0 - 10 000 个获取请求。
目前我正在返回一个承诺,其中包含一个循环获取请求的 for 循环。然而,这非常慢。
await new Promise((resolve, reject) => {
for (let i = 0; i < 10 000; i++) {
let promise = fetch(`website.com/page={i}`)
.then() // process data
promise_array.push(prom);
Promise.allSettled(promise_array).then(() => {
resolve();
})
}
有什么更有效的方法来做到这一点?
使用
p-limit
模块来满足此金额的请求!
您可以批量进行:
let request_array = [];
for (let i = 0; i < 10_000; i++)
request_array.push(async () => fetch(`website.com/page={i}`))
let batch = 20;
while (request_array.length > 0) {
let responses = await Promise.all(
request_array
.splice(0, batch)
.map(async request=>request())
);
for (let response of responses) {
// deal with the response
}
}
如果您在 Node.js 中执行此操作,请查看 keep-alive,它将通过重用连接来加快速度。
使用 Promise.all(),如下所示:
Promise.all([promise1, promise2, promise3, promise4])
这将返回已解决的响应