Promise 静态方法详解与示例

Promise 静态方法详解与示例

Promise 静态方法概述

Promise 提供了多个强大的静态方法来处理异步操作,这些方法可以高效地管理多个 Promise 实例。

Promise 静态方法
Promise.resolve
Promise.reject
Promise.all
Promise.race
Promise.allSettled
Promise.any

方法详解与代码示例

1. Promise.resolve(value)

创建一个立即解析为给定值的 Promise 对象。

// 使用 Promise.resolve 创建已解析的 Promise
const resolvedPromise = Promise.resolve('成功解析的值');

resolvedPromise.then(value => {
  console.log('Promise.resolve 示例:', value);
  // 输出: Promise.resolve 示例: 成功解析的值
});

2. Promise.reject(reason)

创建一个立即拒绝的 Promise 对象,带有给定的原因。

// 使用 Promise.reject 创建已拒绝的 Promise
const rejectedPromise = Promise.reject('操作失败的原因');

rejectedPromise.catch(error => {
  console.log('Promise.reject 示例:', error);
  // 输出: Promise.reject 示例: 操作失败的原因
});

3. Promise.all(iterable)

当所有 Promise 都成功时返回结果数组,任一 Promise 失败则立即拒绝。

// 模拟异步任务
const task1 = new Promise(resolve => setTimeout(() => resolve('任务1完成'), 600));
const task2 = new Promise(resolve => setTimeout(() => resolve('任务2完成'), 400));
const task3 = new Promise(resolve => setTimeout(() => resolve('任务3完成'), 800));

// 全部成功的场景
Promise.all([task1, task2, task3])
  .then(results => {
    console.log('Promise.all 成功:', results);
    // 输出: ['任务1完成', '任务2完成', '任务3完成']
  });

// 包含一个失败的场景
const failingTask = Promise.reject('任务失败');
Promise.all([task1, task2, failingTask])
  .catch(error => {
    console.log('Promise.all 失败:', error);
    // 输出: Promise.all 失败: 任务失败
  });

4. Promise.race(iterable)

返回最先完成的 Promise(无论成功或失败)。

// 创建不同响应时间的 Promise
const fastPromise = new Promise(resolve => setTimeout(() => resolve('快速任务'), 300));
const mediumPromise = new Promise(resolve => setTimeout(() => resolve('中速任务'), 600));
const slowPromise = new Promise((_, reject) => setTimeout(() => reject('慢速任务失败'), 900));

// 第一个完成的 Promise
Promise.race([fastPromise, mediumPromise, slowPromise])
  .then(result => {
    console.log('Promise.race 成功:', result);
    // 输出: Promise.race 成功: 快速任务
  });

// 包含失败任务的场景
const failingFast = new Promise((_, reject) => setTimeout(() => reject('快速失败'), 200));
Promise.race([failingFast, mediumPromise, slowPromise])
  .catch(error => {
    console.log('Promise.race 失败:', error);
    // 输出: Promise.race 失败: 快速失败
  });

5. Promise.allSettled(iterable)

所有 Promise 完成后返回结果数组(包含状态和值)。

// 混合成功和失败的 Promise
const success1 = Promise.resolve('成功1');
const success2 = new Promise(resolve => setTimeout(() => resolve('成功2'), 500));
const failure1 = Promise.reject('失败1');
const failure2 = new Promise((_, reject) => setTimeout(() => reject('失败2'), 300));

Promise.allSettled([success1, success2, failure1, failure2])
  .then(results => {
    console.log('Promise.allSettled 结果:');
    results.forEach((result, index) => {
      console.log(`任务${index + 1}:`, 
        result.status === 'fulfilled' 
          ? `成功 - ${result.value}` 
          : `失败 - ${result.reason}`
      );
    });
    /*
    输出:
      任务1: 成功 - 成功1
      任务2: 成功 - 成功2
      任务3: 失败 - 失败1
      任务4: 失败 - 失败2
    */
  });

6. Promise.any(iterable)

任一 Promise 成功时返回其值,全部失败时返回聚合错误。

// 创建多个可能失败的任务
const failingFast = new Promise((_, reject) => setTimeout(() => reject('快速失败'), 200));
const failingMedium = new Promise((_, reject) => setTimeout(() => reject('中速失败'), 400));
const slowSuccess = new Promise(resolve => setTimeout(() => resolve('慢速成功'), 800));

// 包含成功任务的场景
Promise.any([failingFast, failingMedium, slowSuccess])
  .then(result => {
    console.log('Promise.any 成功:', result);
    // 输出: Promise.any 成功: 慢速成功
  });

// 全部失败的场景
const anotherFailure = new Promise((_, reject) => setTimeout(() => reject('另一个失败'), 500));
Promise.any([failingFast, failingMedium, anotherFailure])
  .catch(error => {
    console.log('Promise.any 全部失败:');
    console.log('错误名称:', error.name); // AggregateError
    console.log('错误信息:', error.message); // All promises were rejected
    console.log('所有错误原因:', error.errors);
    // 输出: ['快速失败', '中速失败', '另一个失败']
  });

方法对比表

方法 描述 成功条件 失败条件 返回结果
Promise.all() 所有 Promise 成功 全部成功 任一失败 成功值数组
Promise.race() 第一个完成的 Promise 第一个成功 第一个失败 第一个完成的值
Promise.allSettled() 所有 Promise 完成 不适用 不适用 包含状态和结果的对象数组
Promise.any() 任一 Promise 成功 任一成功 全部失败 第一个成功的值

实际应用场景

用户界面
Promise.all
同时加载多个数据
Promise.race
超时处理
Promise.allSettled
表单多字段验证
Promise.any
多源数据获取

关键知识点总结

  1. Promise.resolve

    • 创建立即解析的 Promise
    • 可用于将同步值转换为 Promise
  2. Promise.reject

    • 创建立即拒绝的 Promise
    • 适用于明确需要错误结果的场景
  3. Promise.all

    • 并行执行多个异步任务
    • 所有任务必须成功,适合相互依赖的操作
  4. Promise.race

    • 获取最先完成的任务结果
    • 常用于超时处理
  5. Promise.allSettled

    • 获取所有任务的最终状态
    • 无论成功或失败都返回结果
  6. Promise.any

    • 获取第一个成功的任务
    • 全部失败时返回聚合错误

你可能感兴趣的:(前端开发,css,前端,驱动开发,javascript)