温馨提示×

JavaScript Promise能处理并发吗

小樊
84
2024-10-30 18:13:27
栏目: 编程语言

JavaScript Promises 本身并不直接支持并发,它们主要用于处理异步操作并确保按照预期的顺序执行。然而,您可以使用 Promise.all() 方法来实现一定程度的并发。Promise.all() 接收一个 Promise 数组作为参数,并在所有 Promise 都成功完成时返回一个新的 Promise。如果其中任何一个 Promise 失败,它将立即拒绝并返回第一个失败的 Promise 的原因。

以下是一个使用 Promise.all() 实现并发的示例:

const asyncTask1 = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('Task 1 completed');
    }, 1000);
  });
};

const asyncTask2 = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('Task 2 completed');
    }, 2000);
  });
};

const asyncTask3 = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('Task 3 completed');
    }, 3000);
  });
};

Promise.all([asyncTask1(), asyncTask2(), asyncTask3()])
  .then((results) => {
    console.log(results); // ['Task 1 completed', 'Task 2 completed', 'Task 3 completed']
  })
  .catch((error) => {
    console.error(error);
  });

在这个示例中,我们定义了三个异步任务(asyncTask1asyncTask2asyncTask3),它们分别在 1 秒、2 秒和 3 秒后完成。通过将这三个任务放入一个数组中并将它们传递给 Promise.all(),我们可以并发地执行它们。当所有任务都成功完成时,我们将收到一个包含所有任务结果的数组。如果有任何任务失败,我们将立即收到错误信息。

0