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 实现链式调用,让多步异步操作的代码像同步代码一样线性书写,避免了回调地狱。

目录
相关文章
|
机器学习/深度学习
信道编码译码及MATLAB仿真(三)
信道编码译码及MATLAB仿真
770 3
|
3月前
|
人工智能 安全 架构师
告别旅行规划的"需求文档地狱"!这个AI提示词库,让你像调API一样定制完美旅程
作为开发者,旅行规划如同“需求地狱”:信息碎片、需求多变、缺乏测试。本文提出一套“企业级”AI提示词库,将模糊需求转化为结构化“API请求”,实现标准化输入输出,让AI成为你的专属旅行架构师,30分钟生成专业定制方案,提升决策质量,降低90%时间成本。
574 129
|
安全 Android开发 数据安全/隐私保护
请说明鸿蒙操作系统与其他操作系统(如Android和iOS)的主要区别。
请说明鸿蒙操作系统与其他操作系统(如Android和iOS)的主要区别。
1682 1
|
缓存 JavaScript 前端开发
【Node系列】Buffer详解
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。 但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。 Node.js中的Buffer是一个全局对象,属于固有(built-in)类型的全局变量,不需要使用require函数导入。它允许直接操作原始内存,主要用于处理二进制数据流。Buffer实例对象的结构和整数数组很像,但Buffer的大小是固定的且在V8堆外分配物理内存。
378 2
|
JavaScript 前端开发 UED
JS:如何获取浏览器窗口尺寸?
JS:如何获取浏览器窗口尺寸?
535 1
|
2月前
|
存储 JSON 安全
加密和解密函数的具体实现代码
加密和解密函数的具体实现代码
441 136
|
6月前
|
Web App开发 前端开发 JavaScript
前端性能优化利器:图片懒加载实战解析
前端性能优化利器:图片懒加载实战解析
|
9月前
|
资源调度 前端开发 算法
鸿蒙OS架构设计探秘:从分层设计到多端部署
本文深入探讨了鸿蒙OS的架构设计,从独特的“1+8+N”分层架构到模块化设计,再到智慧分发和多端部署能力。分层架构让系统更灵活,模块化设计通过Ability机制实现跨设备一致性,智慧分发优化资源调度,多端部署提升开发效率。作者结合实际代码示例,分享了开发中的实践经验,并指出生态建设是未来的关键挑战。作为国产操作系统的代表,鸿蒙的发展值得每一位开发者关注与支持。
HTML【详解】超链接 a 标签的四大功能(页面跳转、页内滚动【锚点】、页面刷新、文件下载)
HTML【详解】超链接 a 标签的四大功能(页面跳转、页内滚动【锚点】、页面刷新、文件下载)
1783 0
|
9月前
|
人工智能 Java 程序员
一文轻松拿下HarmonyOS NEXT的自定义组件
本文介绍ArkUI中的自定义组件开发,涵盖基础概念、语法格式、创建与使用方法、成员函数/变量定义及通用样式事件设置等内容。通过实例代码演示,帮助开发者掌握自定义组件的构建与复用技巧,助力高效开发。君志所向,一往无前!希望在成长的路上有你相伴。
348 7

热门文章

最新文章