当前位置:首页 > 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
分享给朋友:

相关文章

react函数组件如何混合

react函数组件如何混合

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

react组建中如何调用函数

react组建中如何调用函数

在 React 组件中调用函数的方法 React 组件中调用函数的方式取决于函数的定义位置和作用域。以下是常见的几种方法: 在组件内部定义并调用函数 函数可以直接在组件内部定义,并通过事件或生命周期…

react如何绑定事件处理函数

react如何绑定事件处理函数

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

react如何控制函数组件更新

react如何控制函数组件更新

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

react函数组件如何销毁事件

react函数组件如何销毁事件

在 React 函数组件中销毁事件 React 函数组件中需要手动销毁事件监听或定时器,以避免内存泄漏和性能问题。以下是几种常见情况的处理方法: 使用 useEffect 清理副作用 在函数组件中,…

react函数组件如何传参

react函数组件如何传参

传递参数的方式 React函数组件可以通过props传递参数。父组件在调用子组件时,通过属性名传递数据,子组件通过函数的第一个参数(通常命名为props)接收。 父组件传递参数示例: functi…