当前位置:首页 > 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可以更方便地实现并行控制。

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实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现

js实现

JavaScript 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…