📜  javascript 等待多个承诺 - Javascript (1)

📅  最后修改于: 2023-12-03 15:16:15.045000             🧑  作者: Mango

JavaScript 等待多个承诺 - JavaScript

在 JavaScript 编程中,我们经常需要等待多个承诺完成后才能执行下一步操作。本文将介绍有关 JavaScript 处理多个承诺的技巧。

承诺

JavaScript 的承诺是处理异步操作的一种方式。承诺表示一个异步操作的最终结果。通常使用 new Promise() 创建承诺。承诺的构造函数接受一个执行函数,该函数接受两个参数:一个 resolve 函数和一个 reject 函数。resolve 函数表示承诺成功完成,reject 函数表示承诺失败。例如:

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('承诺成功');
  }, 1000);
});
处理多个承诺

如果要等待多个承诺完成,可以使用以下方法。

Promise.all

Promise.all 方法接受一个承诺数组,返回一个新的承诺,该承诺将在所有承诺都成功完成时解析,否则将被拒绝。如果有任何承诺被拒绝,则该承诺将被拒绝,并返回第一个拒绝的承诺的理由。例如:

const promise1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('承诺1成功');
  }, 1000);
});
const promise2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('承诺2成功');
  }, 2000);
});
Promise.all([promise1, promise2])
  .then(results => {
    console.log(results); // ['承诺1成功', '承诺2成功']
  })
  .catch(error => {
    console.error(error); // 如果 promise1 或 promise2 被拒绝,则会在此处将其拒绝的原因打印出来。
  });
Promise.race

Promise.race 方法接受一个承诺数组,返回一个新的承诺,该承诺将在第一个承诺成功完成时解析,否则将被拒绝。例如:

const promise1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('承诺1成功');
  }, 1000);
});
const promise2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('承诺2成功');
  }, 2000);
});
Promise.race([promise1, promise2])
  .then(result => {
    console.log(result); // '承诺1成功'
  })
  .catch(error => {
    console.error(error); // 如果 promise1 和 promise2 都被拒绝,则会在此处将其拒绝的原因打印出来。
  });
结论

JavaScript 中的承诺是处理异步操作的一种方式。Promise.allPromise.race 方法可以让我们轻松地等待多个承诺完成或找到最先完成的承诺。