Promise.all 方法的参数可以是哪些类型?

简介: Promise.all 方法的参数可以是哪些类型?

Promise 实例的 then() 方法是处理异步操作结果的核心方法,主要作用是:为 Promise 注册“成功/失败”的回调函数,并返回一个新的 Promise 对象,从而实现链式调用

具体作用拆解:

  1. 注册回调函数
    then() 可以接收两个可选参数,分别对应 Promise 两种状态的处理逻辑:

    • 第一个参数:onFulfilled 函数
      当 Promise 状态变为 成功(Fulfilled) 时触发,接收异步操作的“成功结果”作为参数。
    • 第二个参数:onRejected 函数(可选)
      当 Promise 状态变为 失败(Rejected) 时触发,接收异步操作的“失败原因”作为参数。

    示例:

    new Promise((resolve, reject) => {
         
      resolve("成功结果"); // 模拟异步操作成功
    }).then(
      (result) => {
          console.log("成功处理:", result); }, // 成功回调
      (error) => {
          console.log("失败处理:", error); }    // 失败回调(可选)
    );
    
  1. 返回新的 Promise,支持链式调用
    then() 方法会返回一个全新的 Promise 对象,这是实现链式调用的关键。新 Promise 的状态和结果由以下规则决定:

    • 如果 onFulfilled/onRejected 回调返回一个普通值(非 Promise),新 Promise 会立即变为成功状态,结果为该返回值。
    • 如果回调返回一个 Promise 对象,新 Promise 会“继承”这个 Promise 的状态和结果(等待其完成,再决定自身状态)。
    • 如果回调抛出错误throw new Error(...)),新 Promise 会变为失败状态,结果为抛出的错误。

    示例(链式调用):

    // 链式调用:上一个 then() 的返回值会作为下一个 then() 的输入
    Promise.resolve(1)
      .then(num => num * 2) // 返回普通值 2 → 新 Promise 成功,结果为 2
      .then(num => Promise.resolve(num + 3)) // 返回 Promise → 新 Promise 成功,结果为 5
      .then(num => console.log(num)); // 输出:5
    
  1. 分离成功与失败逻辑
    虽然 then() 可以通过第二个参数处理失败,但更推荐用 catch() 专门处理错误(catch() 本质是 then(null, onRejected) 的语法糖)。这样可以让成功逻辑和失败逻辑更清晰:
    fetchData()
      .then(data => {
          /* 处理成功 */ }) // 只关注成功逻辑
      .catch(error => {
          /* 处理失败 */ }); // 统一捕获所有环节的错误
    

总结:

then() 方法的核心价值是:将异步操作的“后续处理逻辑”与“异步操作本身”解耦,并通过返回新 Promise 实现链式调用,让多步异步操作的代码像同步代码一样线性书写,避免了回调地狱。

目录
相关文章
|
7天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1165 3
|
6天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
841 12
|
16天前
|
人工智能 运维 安全
|
5天前
|
机器学习/深度学习 物联网
Wan2.2再次开源数字人:Animate-14B!一键实现电影角色替换和动作驱动
今天,通义万相的视频生成模型又又又开源了!Wan2.2系列模型家族新增数字人成员Wan2.2-Animate-14B。
428 10
|
7天前
|
弹性计算 Kubernetes jenkins
如何在 ECS/EKS 集群中有效使用 Jenkins
本文探讨了如何将 Jenkins 与 AWS ECS 和 EKS 集群集成,以构建高效、灵活且具备自动扩缩容能力的 CI/CD 流水线,提升软件交付效率并优化资源成本。
329 0
|
14天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!