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
最佳实践:
状态管理:
- 状态转换不可逆
- 只能转换一次
- 注意状态封装
错误处理:
- 使用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
常见使用场景:
请求并发控制:
- 批量数据处理
- 资源并行加载
- 竞态请求处理
异步流程控制:
- 任务编排
- 超时控制
- 状态同步