Promise.all()
是 JavaScript 中的一个方法,用于并行执行多个 Promise 对象,并在所有 Promise 都成功时返回一个包含所有结果的数组。然而,当 Promise 数量非常大时,可能会导致性能问题或资源耗尽。为了限制每秒执行的 Promise 数量,可以使用一种称为“限流”(Rate Limiting)的技术。
以下是一个示例代码,展示如何使用 p-limit
库来限制每秒执行的 Promise 数量为 5 个:
const pLimit = require('p-limit');
// 创建一个限流器,每秒最多执行 5 个 Promise
const limit = pLimit(5);
// 假设我们有一个生成 Promise 的函数
function createPromise(value) {
return new Promise((resolve) => {
setTimeout(() => resolve(value), Math.random() * 1000);
});
}
// 生成 20 个 Promise
const promises = Array.from({ length: 20 }, (_, i) => createPromise(i));
// 使用限流器包装每个 Promise
const limitedPromises = promises.map((promise) => limit(() => promise));
// 等待所有限流后的 Promise 完成
Promise.all(limitedPromises)
.then((results) => console.log('All promises resolved:', results))
.catch((error) => console.error('Error:', error));
pLimit(5)
创建一个限流器,表示每秒最多执行 5 个 Promise。createPromise
函数用于生成随机的 Promise。limit(() => promise)
包装每个 Promise,使其受限于限流器。Promise.all(limitedPromises)
等待所有限流后的 Promise 完成。通过这种方式,你可以有效地控制每秒执行的 Promise 数量,从而提高系统的稳定性和性能。
领取专属 10元无门槛券
手把手带您无忧上云