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

    • 获取第一个成功的任务
    • 全部失败时返回聚合错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值