Skip to content

Promise完整指南

1. Promise状态流转

stateDiagram-v2
    [*] --> Pending: 创建Promise
    Pending --> Fulfilled: resolve()
    Pending --> Rejected: reject()
    Fulfilled --> [*]: 状态不可逆
    Rejected --> [*]: 状态不可逆
    
    note right of Pending
        初始状态
        可以转换到其他状态
    end note
    
    note right of Fulfilled
        操作成功完成
        状态不可更改
    end note
    
    note right of Rejected
        操作失败
        状态不可更改
    end note

2. Promise静态方法

mindmap
    root((Promise))
        静态方法
            Promise.resolve()
                快速创建成功状态
                值的包装
            Promise.reject()
                快速创建失败状态
                错误传递
            Promise.all()
                并行执行
                全部成功才成功
                一个失败则失败
            Promise.race()
                竞速执行
                最快的结果
                成功或失败
            Promise.allSettled()
                等待所有完成
                收集所有结果
                不关心成功失败

3. 并发控制方法对比

方法特点使用场景结果处理
Promise.all全部成功才成功依赖所有结果数组形式返回
Promise.race最快的结果超时控制单个结果
Promise.allSettled等待所有完成状态收集详细状态信息

4. 实际应用示例

graph TD
    A[并发请求] --> B{选择方法}
    B -->|所有结果都需要| C[Promise.all]
    B -->|需要最快结果| D[Promise.race]
    B -->|需要所有状态| E[Promise.allSettled]
    
    C --> F[批量数据处理]
    D --> G[请求超时控制]
    E --> H[状态统计分析]
    
    style A fill:#f96
    style B fill:#bbf
    style C fill:#9cf
    style D fill:#9cf
    style E fill:#9cf

5. 错误处理机制

flowchart TD
    A[Promise执行] --> B{是否成功?}
    B -->|成功| C[Fulfilled]
    B -->|失败| D[Rejected]
    
    D --> E{错误处理}
    E -->|catch| F[处理错误]
    E -->|finally| G[清理资源]
    
    style A fill:#f96
    style B fill:#bbf
    style D fill:#fcc
    style F fill:#9cf

IMPORTANT

最佳实践

  1. 状态管理

    • 状态转换不可逆
    • 只能转换一次
    • 注意状态封装
  2. 错误处理

    • 使用catch捕获错误
    • 避免吞掉错误
    • 合理使用finally

6. 高级应用

6.1 异步任务编排

sequenceDiagram
    participant T1 as Task1
    participant T2 as Task2
    participant T3 as Task3
    
    Note over T1,T3: Promise.all并行执行
    
    par 并行执行
        T1->>T2: 执行任务1
        T2->>T3: 执行任务2
        T3->>T1: 执行任务3
    end
    
    Note over T1,T3: 所有任务完成

6.2 实际应用场景

TIP

常见使用场景

  1. 请求并发控制

    • 批量数据处理
    • 资源并行加载
    • 竞态请求处理
  2. 异步流程控制

    • 任务编排
    • 超时控制
    • 状态同步