当前位置:首页 > JavaScript

JS实现一个并发函数

2026-03-02 02:54:36JavaScript

实现并发函数的几种方法

在JavaScript中实现并发控制可以通过多种方式完成,以下是几种常见的实现方法:

使用Promise.all

Promise.all可以并行执行多个Promise,并在所有Promise完成后返回结果数组。适用于需要同时执行多个异步操作且不关心顺序的场景。

JS实现一个并发函数

const fetchData = (url) => fetch(url).then(res => res.json());

const concurrentRequests = async (urls) => {
  const promises = urls.map(url => fetchData(url));
  return Promise.all(promises);
};

// 使用示例
const urls = ['url1', 'url2', 'url3'];
concurrentRequests(urls).then(results => console.log(results));

使用async/await结合循环

通过async/await和循环结构可以实现更灵活的并发控制,例如限制并发数量。

JS实现一个并发函数

const runConcurrently = async (tasks, concurrencyLimit) => {
  const results = [];
  const executing = new Set();

  for (const task of tasks) {
    const p = task().then(res => {
      executing.delete(p);
      return res;
    });
    executing.add(p);
    results.push(p);

    if (executing.size >= concurrencyLimit) {
      await Promise.race(executing);
    }
  }

  return Promise.all(results);
};

// 使用示例
const tasks = [() => fetch('url1'), () => fetch('url2')];
runConcurrently(tasks, 2).then(console.log);

使用第三方库

许多第三方库提供了更完善的并发控制功能,如p-limitasync等。

const pLimit = require('p-limit');
const limit = pLimit(3); // 限制并发数为3

const tasks = [
  limit(() => fetch('url1')),
  limit(() => fetch('url2'))
];

Promise.all(tasks).then(console.log);

使用Worker Threads

对于CPU密集型任务,可以使用Node.js的Worker Threads实现真正的并行执行。

const { Worker, isMainThread, parentPort } = require('worker_threads');

if (isMainThread) {
  const worker = new Worker(__filename);
  worker.on('message', msg => console.log(msg));
} else {
  parentPort.postMessage('Worker task completed');
}

每种方法都有其适用场景,选择哪种取决于具体需求。Promise.all适合简单并行任务,自定义函数适合需要精细控制并发的场景,第三方库可以提供更丰富的功能,Worker Threads则适合CPU密集型任务。

标签: 函数JS
分享给朋友:

相关文章

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $p…

vue中实现节流函数

vue中实现节流函数

使用 Lodash 的 _.throttle 方法 安装 Lodash 并导入 throttle 方法: npm install lodash 在 Vue 组件中使用: import { thro…

react函数组件如何混合

react函数组件如何混合

混合 React 函数组件的方法 在 React 中,函数组件可以通过组合、高阶组件(HOC)、自定义 Hook 或 Render Props 等方式实现混合功能。以下是几种常见的方法: 使用自定义…

react如何绑定事件处理函数

react如何绑定事件处理函数

在 React 中绑定事件处理函数的方法 React 提供了多种方式来绑定事件处理函数,以下是常见的几种方法: 使用箭头函数自动绑定 this 在类组件中,可以使用箭头函数来定义方法,这样可以避免…

react如何控制函数组件更新

react如何控制函数组件更新

控制函数组件更新的方法 在React中,函数组件的更新通常由状态(state)或属性(props)的变化触发。以下是几种常见的控制函数组件更新的方法: 使用React.memo进行浅比较 React…

react类函数中如何获取到props

react类函数中如何获取到props

在React类组件中获取props可以通过以下几种方式实现: 通过构造函数获取 在类组件的构造函数中,props会作为第一个参数传入。可以通过super(props)调用父类构造函数,并将props…