当前位置:首页 > JavaScript

js怎么实现异步并行

2026-01-31 03:42:45JavaScript

异步并行实现方法

在JavaScript中,实现异步并行操作可以通过多种方式完成。以下是几种常见的方法:

Promise.all

Promise.all 方法接收一个Promise数组,当所有Promise都成功时返回一个新的Promise,该Promise的结果是一个包含所有Promise结果的数组。如果其中任何一个Promise失败,整个Promise.all会立即拒绝。

const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve) => {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then((values) => {
  console.log(values); // [3, 42, "foo"]
});

Promise.allSettled

Promise.allSettled 方法会等待所有Promise完成(无论成功或失败),返回一个包含每个Promise结果的对象数组。

const promise1 = Promise.resolve(3);
const promise2 = new Promise((_, reject) => setTimeout(reject, 100, 'error'));

Promise.allSettled([promise1, promise2]).then((results) => {
  console.log(results);
  // [
  //   { status: 'fulfilled', value: 3 },
  //   { status: 'rejected', reason: 'error' }
  // ]
});

async/await 结合 Promise.all

在async函数中,可以使用await Promise.all来并行执行多个异步操作。

async function parallelAsyncTasks() {
  const [result1, result2] = await Promise.all([
    fetch('https://api.example.com/data1'),
    fetch('https://api.example.com/data2')
  ]);
  const data1 = await result1.json();
  const data2 = await result2.json();
  console.log(data1, data2);
}

并行执行非Promise任务

对于非Promise任务,可以使用Promise.all包装成Promise数组来并行执行。

const tasks = [
  () => new Promise(resolve => setTimeout(() => resolve('Task 1'), 1000)),
  () => new Promise(resolve => setTimeout(() => resolve('Task 2'), 500)),
  () => 'Task 3' // 非Promise任务
];

Promise.all(tasks.map(task => Promise.resolve(task()))).then(results => {
  console.log(results); // ["Task 1", "Task 2", "Task 3"]
});

第三方库(如async.js)

使用第三方库如async.js可以更方便地实现并行控制。

js怎么实现异步并行

const async = require('async');

async.parallel([
  function(callback) { setTimeout(() => callback(null, 'one'), 200); },
  function(callback) { setTimeout(() => callback(null, 'two'), 100); }
], (err, results) => {
  console.log(results); // ['one', 'two']
});

注意事项

  • 并行执行的Promise数量过多可能导致资源竞争,需根据实际情况控制并发数。
  • 使用Promise.all时,任一Promise失败会导致整个操作失败,需考虑错误处理。
  • Promise.allSettled适合需要知道所有Promise最终状态的场景。

标签: js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…