首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将Promise.all()限制为每秒5个promises?

Promise.all() 是 JavaScript 中的一个方法,用于并行执行多个 Promise 对象,并在所有 Promise 都成功时返回一个包含所有结果的数组。然而,当 Promise 数量非常大时,可能会导致性能问题或资源耗尽。为了限制每秒执行的 Promise 数量,可以使用一种称为“限流”(Rate Limiting)的技术。

以下是一个示例代码,展示如何使用 p-limit 库来限制每秒执行的 Promise 数量为 5 个:

代码语言:txt
复制
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));

解释

  1. p-limit 库:这是一个用于限流的库,可以轻松地限制并发执行的数量。
  2. 限流器:通过 pLimit(5) 创建一个限流器,表示每秒最多执行 5 个 Promise。
  3. 生成 PromisecreatePromise 函数用于生成随机的 Promise。
  4. 限流后的 Promise:使用 limit(() => promise) 包装每个 Promise,使其受限于限流器。
  5. 等待所有 Promise 完成:使用 Promise.all(limitedPromises) 等待所有限流后的 Promise 完成。

优势

  • 控制并发:避免过多的并发请求导致资源耗尽或性能问题。
  • 稳定性:确保系统在高负载下仍能稳定运行。

应用场景

  • API 请求:限制对第三方 API 的请求频率,避免被封禁。
  • 数据处理:在处理大量数据时,控制处理速度以避免系统过载。
  • 任务调度:在任务调度系统中,控制任务的并发执行数量。

参考链接

通过这种方式,你可以有效地控制每秒执行的 Promise 数量,从而提高系统的稳定性和性能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券