Promise.all
是 JavaScript 中的一个方法,用于处理多个 Promise 对象。当所有 Promise 都成功完成时,Promise.all
返回一个包含所有 Promise 结果的数组。如果任何一个 Promise 失败,则 Promise.all
立即返回该失败的 Promise 的错误。
Promise.all
允许你并发处理多个异步操作,而不是顺序执行,从而提高性能。Promise.all
接受一个 Promise 对象的数组作为参数,并返回一个新的 Promise 对象。
当你需要同时发起多个网络请求,并且希望在所有请求都完成后处理结果时,可以使用 Promise.all
。
处理数以千计的请求时,直接使用 Promise.all
可能会导致内存溢出或浏览器崩溃,因为浏览器对并发请求的数量有限制。
async function processBatch(batch) {
return Promise.all(batch.map(request => fetch(request)));
}
async function processRequests(requests, batchSize = 100) {
const results = [];
for (let i = 0; i < requests.length; i += batchSize) {
const batch = requests.slice(i, i + batchSize);
const batchResults = await processBatch(batch);
results.push(...batchResults);
}
return results;
}
const requests = Array.from({ length: 1000 }, (_, i) => `https://api.example.com/data/${i}`);
processRequests(requests).then(results => {
console.log(results);
}).catch(error => {
console.error(error);
});
p-limit
或 async-sema
,这些库可以帮助你限制并发请求的数量。const pLimit = require('p-limit');
const limit = pLimit(100); // 限制并发请求数量为100
async function processRequests(requests) {
const promises = requests.map(request => limit(() => fetch(request)));
return Promise.all(promises);
}
const requests = Array.from({ length: 1000 }, (_, i) => `https://api.example.com/data/${i}`);
processRequests(requests).then(results => {
console.log(results);
}).catch(error => {
console.error(error);
});
通过分批处理或使用限流库,可以有效地处理数以千计的请求,避免内存溢出和浏览器崩溃的问题。
领取专属 10元无门槛券
手把手带您无忧上云