Promise

14 阅读2分钟

Promise

含义:

Promise对象是一个构造函数。一旦创建它就会立即执行,不能中途取消

Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolvereject

有三种状态:pending初始,fulfilled成功,rejected失败,一旦发生,状态就会凝固,不会再变

1.创建 Promise

新建一个构造函数,两个参数,都是函数resolve(value),reject(error);

const promise = new Promise((resolve, reject) => {
  // 异步操作
  if (/* 成功条件 */) {
    resolve(value); // 成功时调用
  } else {
    reject(error); // 失败时调用
  }
});

2.实例方法

2.1then() - 处理 Promise 的成功状态

promise.then(
  value => { /* 处理成功结果 */ },
);

2.2catch() - 处理 Promise 的失败状态

promise.catch(
  error => { /* 处理错误 */ }
);

2.3finally() - 无论成功失败都会执行

promise.finally(
  () => { /* 清理操作 */ }
);

3.静态方法

Promise.all() - 等待所有 Promise 完成

适用场景:

  • 需要等待多个不相关的异步操作全部完成
  • 需要保持多个异步结果的顺序
Promise.all([promise1, promise2, ...])
  .then(values => { /* 所有 Promise 都成功 */ })
  .catch(error => { /* 任一 Promise 失败 */ });
//返回值是一个数组,包含所有输入 Promise 的 解析值(resolve values),且顺序与输入顺序一致
const p1 = Promise.resolve(1);
const p2 = Promise.resolve(2);
const p3 = Promise.resolve(3);
Promise.all([p1, p2, p3])
  .then(values => {
    console.log(values); // [1, 2, 3]
  });
//返回的是 第一个被拒绝的 Promise 的原因(rejection reason)
const p1 = Promise.resolve(1);
const p2 = Promise.reject('Error occurred');
const p3 = Promise.resolve(3);
Promise.all([p1, p2, p3])
  .catch(reason => {
    console.log(reason); // "Error occurred"
  });

注意,如果作为参数的 Promise 实例,自己定义了catch方法,那么它一旦被rejected,并不会触发Promise.all()catch方法

Promise.allSettled() - 等待所有 Promise 完成(无论成功失败)

Promise.allSettled([promise1, promise2, ...])
  .then(results => { /* 包含每个 Promise 的状态和值/原因 */ });

Promise.race() - 返回第一个完成的 Promise

Promise.race([promise1, promise2, ...])
  .then(value => { /* 第一个成功的 Promise */ })
  .catch(error => { /* 第一个失败的 Promise */ });

Promise.any() - 返回第一个成功的 Promise

Promise.any([promise1, promise2, ...])
  .then(value => { /* 第一个成功的 Promise */ })
  .catch(errors => { /* 所有 Promise 都失败 */ });

Promise.resolve()/reject() 创建已解决/拒绝的Promise

promise的练习题 juejin.cn/post/684490…