深入理解 Promise 原理

什么是 Promise?

Promise 是 JavaScript 中用于处理异步操作的对象。它代表一个尚未完成但预期将来会完成的操作,并提供统一的 API 来处理异步结果。

Promise 有三种状态:

Promise 的基本用法

const promise = new Promise((resolve, reject) => {

  // 异步操作

  setTimeout(() => {

    const success = true;

    if (success) {

      resolve('操作成功!');

    } else {

      reject('操作失败!');

    }

  }, 1000);

});



promise

  .then(result => console.log(result))

  .catch(error => console.error(error));

Promise 链式调用原理

每次调用 .then().catch() 都会返回一个新的 Promise,从而支持链式调用。 这使得我们可以将多个异步操作串联起来,避免“回调地狱”。

动手演示:运行一个 Promise

点击下面的按钮,查看 Promise 的执行结果:

手写简易 Promise(符合 Promise/A+ 规范核心)

// 简易 Promise 实现(仅用于教学)

class MyPromise {

  constructor(executor) {

    this.state = 'pending';

    this.value = undefined;

    this.reason = undefined;

    this.onFulfilledCallbacks = [];

    this.onRejectedCallbacks = [];



    const resolve = value => {

      if (this.state === 'pending') {

        this.state = 'fulfilled';

        this.value = value;

        this.onFulfilledCallbacks.forEach(fn => fn());

      }

    };



    const reject = reason => {

      if (this.state === 'pending') {

        this.state = 'rejected';

        this.reason = reason;

        this.onRejectedCallbacks.forEach(fn => fn());

      }

    };



    try {

      executor(resolve, reject);

    } catch (err) {

      reject(err);

    }

  }



  then(onFulfilled, onRejected) {

    onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : value => value;

    onRejected = typeof onRejected === 'function' ? onRejected : err => { throw err; };



    let promise2 = new MyPromise((resolve, reject) => {

      if (this.state === 'fulfilled') {

        setTimeout(() => {

          try {

            let x = onFulfilled(this.value);

            resolve(x);

          } catch (e) {

            reject(e);

          }

        }, 0);

      }

      if (this.state === 'rejected') {

        setTimeout(() => {

          try {

            let x = onRejected(this.reason);

            reject(x);

          } catch (e) {

            reject(e);

          }

        }, 0);

      }

      if (this.state === 'pending') {

        this.onFulfilledCallbacks.push(() => {

          setTimeout(() => {

            try {

              let x = onFulfilled(this.value);

              resolve(x);

            } catch (e) {

              reject(e);

            }

          }, 0);

        });

        this.onRejectedCallbacks.push(() => {

          setTimeout(() => {

            try {

              let x = onRejected(this.reason);

              reject(x);

            } catch (e) {

              reject(e);

            }

          }, 0);

        });

      }

    });

    return promise2;

  }

}

总结

Promise 是现代 JavaScript 异步编程的基石。理解其状态机模型、链式调用机制以及错误处理方式, 对编写健壮、可维护的前端代码至关重要。通过本页的学习与实践,希望你能掌握 Promise 的核心原理!

输入文字自动生成PPT神器 - 智能PPT制作工具推荐与使用指南 中国知网AI论文写作指南 - 智能学术写作技巧与工具推荐 论文水印写什么内容好?保护学术成果的水印设计指南 毕业论文水印写什么?保护学术成果的水印设计指南 免费AI改稿小程序_智能润色降AIGC检测_小发猫工具 写作文培训班报名 - 专业作文辅导提升写作能力 毕业论文框线怎么去掉?Word文档去除框线详细教程 毕业论文免费修改软件推荐与使用指南 - 提升论文质量必备工具 写字网络课程哪个好 - 专业书法网课推荐与选择指南 论文图表水印去除方法详解 - 小发猫降AIGC工具辅助技巧 论文打印必须要激光打印吗?全面解析打印方式选择 论文里怎么打文献 | 学术写作规范与降AIGC工具指南 怎么删除论文多余的页 | 论文排版技巧与方法 AI写作助手写小说能赚钱吗?深度解析AI创作变现攻略 AI文档转PPT全攻略:智能工具让办公效率翻倍 去AI化App推荐与使用指南 - 让内容更自然真实 论文怎么清除段落布局 | 学术写作排版优化指南 写好论文教学 - 学术论文写作完整指南与技巧 智能AI作文助手 - 探索自动写作文的AI技术 | 提升写作效率的未来工具 毕业论文能用笔涂改嘛?学术论文修改规范与注意事项 哪个AI写作便宜?2024年高性价比AI写作工具推荐与对比 论文复制后有很多阴影怎么消除?高效去除文档格式问题 免费AI读书软件推荐 - 智能阅读助手提升学习效率 如何快速写完论文初稿AI - AI辅助写作完整指南与工具推荐 用AI修改视频 - 智能视频编辑与降AIGC解决方案 论文签名水印制作指南 - 专业教程与工具推荐 如何消除AI创作痕迹 | 专业降AIGC工具指南 AI写作文章多少钱 - AI写作价格详解与成本分析 今日头条AI写作收益怎么做 - 新手入门指南与实操技巧 免费AI作文生成器7LONGWEN入口 - 智能写作助手在线使用 什么AI可以做文档?全面解析AI文档处理工具及降AIGC技巧 论文如何清除所有页眉 - 详细教程与技巧 免费AI改简历 - 智能优化简历内容,提升求职成功率 AI帮写作文 - 智能写作助手助力提升作文水平 | AI写作专题 网上AI聊天软件推荐 - 2024年最受欢迎的智能对话平台对比 怎么让AI修改文章?AI改写技巧与小发猫降AIGC工具详解 AI论文APP查重率低免费 - 智能降重与高效查重解决方案 论文图片水印规则详解:学术规范与版权保护指南 论文批注封面修改指南 | 学术论文排版技巧 智能AI生成视频软件专题 - 探索AI视频创作新纪元 | 小发猫工具推荐 Ai智能写作软件使用教程 - 专业AI写作工具完整指南 AI作文批改神器 - 智能写作辅助工具,提升写作水平 智能AI写作作文教育项目 - 引领未来写作教育新趋势 照片换风格AI工具 - 一键转换艺术风格,智能图像生成 论文语言学术化:从入门到精通的实用指南 AI写申请报告全攻略 - 智能写作助手让申请更高效 论文怎样去掉点 | 学术写作技巧与降AIGC工具指南 怎么让AI生成的文章像人写的 | AI降重与润色技巧 免费AI改稿软件推荐_小发猫降AIGC工具使用指南 网上写作课程哪位老师教得好 - 专业写作导师推荐与课程评测 论文中可以插入图片吗?学术论文插图规范与使用指南 论文模板怎么去掉批注?详细教程与小发猫降AIGC工具推荐 网上学AI课有用吗?深度解析在线AI学习的价值与效果 怎么给论文加文献综述_学术写作指南_小发猫 AI写的论文里有数据吗?深度解析AI生成内容的真实性与可靠性 英文论文查重需要查参考文献吗?全面解析与实用指南 论文印刷排版指南 - 专业学术文档排版技巧与工具推荐 自己投稿论文所需费用全解析 - 投稿成本指南与省钱攻略 停车场AI收费系统 - 智能停车管理解决方案 英文硕士论文查重指南 - 免费查重工具与降AIGC方法 网上作文课哪家好?2024年优质在线作文辅导平台深度对比 AI作文生成器2023版 - 智能写作助手,轻松创作优质文章 网上写字课哪个比较好?2024年优质在线书法课程推荐与评测 如何提升论文深度:从选题到论证的全流程指南 AI写入党申请书指南 - 智能写作工具助力入党申请 AI软件手机版免费下载 - 精选移动端智能应用推荐 AI免费改写论文工具推荐 | 小发猫降AIGC工具助你原创无忧 AI写作文生成器免费 - 智能作文创作神器,提升写作效率 用什么AI可以写作文?2026年AI写作工具推荐与降AIGC技巧 AI剪辑价格对比与选择指南 - 专业视频制作成本分析 打印论文用双面吗?双面打印全攻略与技巧 AI写作猿和写作鱼哪个好?深度对比评测与选择指南 网上的AI是怎么弄的 - AI技术原理与实现方法详解 大学生发表论文的平台有哪些 - 学术发表指南与平台推荐 免费AI写长文论文网站推荐 - 专业学术写作助手指南 打印出来的论文格式不对有影响吗?论文格式规范全解析 AI自动写诗生成器 - 智能诗词创作工具,激发无限文学灵感 怎么用AI写硕士毕业论文 - AI论文写作指南与技巧 毕业论文字迹去除方法大全 | 纸张污渍清除指南 怎样去除论文空段_论文排版优化技巧_小发猫降AIGC AI自动生成视频人物全解析 - 技术原理与应用指南 学术论文撰写技巧与方法 | 高效写作指南 爱作文怎么写最惊艳 - 提升作文写作技巧与创意方法专题 毕业论文水印覆盖解决方案_小发猫降AIGC工具 自己写的论文在哪里发表 - 学术论文投稿指南与发表渠道全解析 AI配音专家收费吗?全面解析AI配音价格与性价比 如何把AI写的文章改成人写的 | AI降重与润色技巧 论文怎么插入引用符号 - 学术写作规范指南 免费AI写论文网站手机版 - 随时随地智能写作助手 短视频AI一键生成能变现吗?深度解析AI视频创作变现攻略 写的文章可以投稿到哪里 - 全面指南与优质投稿平台推荐 AI写作有用吗?深度解析人工智能写作的价值与局限 论文写作指南:如何在学术论文中规范插入代码并降低AIGC检测率 维普论文上传文档有空白页?WPS修改技巧及小发猫降AIGC工具使用指南 论文空白页加页码吗?学术论文格式规范详解 网上写字课推荐 - 精选优质在线书法课程平台指南 自己写的论文怎么添加参考文献 - 学术写作指南 短视频AI一键生成App不用写文案 - 智能创作新时代 关爱作文写作技巧 - 掌握情感表达与叙事方法提升作文质量 AI写作文软件App免费推荐 - 智能写作助手提升创作效率