Promise原型对象

在浏览器控制台输入如下代码,可以看到Promise原型对象信息。

var p = new Promise(()=>{});
console.log(p)


Promise原型上有catchfinallythen等方法。同时Promise内部维护了两个属性值statusvalue

Promise构造方法

再看Promise的构造方法,如下图

构造函数有allallSettledfinallyracerejectresolve等方法。

简单实现

构造函数实现总结:

  1. 构造函数接受一个函数executor,并立即执行;
  2. executor函数接受两个参数,一个是resolve函数,一个是rejected函数,用于后续回调执行;
  3. promise对象的then方法中的第一个参数(函数)是状态变为fulfilled时的回调。
  4. resolve函数被调用时,会触发then方法中的回调函数的指定。
const PENDING = 'pending';
const FULFILLED = 'fullfilled';
const REJECTED = 'rejected';
function Promise(executor) {this.status = PENDING;this.value = undefined;this.onResolvedCallback = []; //成功状态下的回调函数集合this.onRejectedCallback = [];function resolve(value) {};function reject() {};executor(resolve, reject);
}
const PENDING = 'pending';
const FULFILLED = 'fullfilled';
const REJECTED = 'rejected';
function Promise(executor) {this.status = PENDING;this.value = undefined;this.onResolvedCallback = []; //成功状态下的回调函数集合this.onRejectedCallback = [];function resolve(value) {if(this.status === PENDING) {this.status = FULFILLED;this.value = value;// 触发后续then方法中的回调方法执行onRejectedCallback.forEach(onResolved => {onResolved(value)});}};function reject() {};try { // 考虑到执行executor的过程中有可能出错,所以我们用try/catch块给包起来,并且在出错后以catch到的值reject掉这个Promiseexecutor(resolve, reject) // 执行executor} catch(e) {reject(e)}
}
``

参考

https://www.jianshu.com/p/b4f0425b22a1
https://github.com/xieranmaya/blog/issues/3

浅析Promise原理相关推荐

  1. 浅析bootstrap原理及优缺点

    网格系统的实现原理,是通过定义容器大小,平分12份(也有平分成24份或32份,但12份是最常见的),再调整内外边距,最后结合媒体查询,就制作出了强大的响应式网格系统 网格系统的实现原理,是通过定义容器 ...

  2. 面试题promise原理

    面试题Promise原理 在Promise的内部,有一个状态管理器的存在,有三种状态:pending.fulfilled.rejected. (1) promise 对象初始化状态为 pending. ...

  3. 从零开始,手写完整的Promise原理!

    珠峰十年深度沉淀,最具诚意与深度的课程限时免费开放,带你从0到1完美诠释异步编程,并手写一个完整的promise原理!  [扫码免费参加,限200人] (名额有限,扫描上方二维码立即参加!) 历史学员 ...

  4. 手把手带你学会Odoo OWL组件开发(5):浅析OWL原理

    [本系列内容直达:] 手把手带你学习Odoo OWL组件开发(1):认识 OWL 手把手带你学会Odoo OWL组件开发(2):OWL的使用 手把手带你学会Odoo OWL组件开发(3):核心内容指南 ...

  5. 浅析Promise用法

    浅析Promise用法 要理解Promise要知道没有Promise的回调地狱 如何插入一段漂亮的代码片 Promise语法与then的用法 所谓Promise,简单说就是一个容器,里面保存着某个未来 ...

  6. js中promise原理及手动基本实现_V1

    前言 这几天面试过程,有个面试官突然跟我抠上了promise的实现原理,虽然有所准备,但是没能清晰地说出其中的原理,所以有点遗憾!!!,但是事已至此,只能默默去查了相关资料深入其中了解一番.因此就有了 ...

  7. Promise原理详解及实现方式

    在异步编程中,许多操作都会放在回调函数(callback)中,有时候需要拿到上一个异步操作的返回值再做第二次请求 比如: asyncOperation(data => {// 处理 `data` ...

  8. ES6 Promise原理

    ES6 Promise原理 一.Promise是什么 二.为什么会有Promise 1.回调地狱 + 异步同步事件调用顺序带来的双重伤害 2.回调事件的分离 三.Promise的三种状态 1.reso ...

  9. promise原理与async 及 await

    promise原理与async 及 await 1.1 Promise是一个构造函数 1.2 Promise优缺点 1.3 async 及 await 1.4 相较于 Promise,async/aw ...

最新文章

  1. nodejs实践录:windows 10系统nodejs环境搭建
  2. html 选中变颜色变化,如何防止HTML中的选项中的颜色变化以及选中的元素在html中被选中并失去焦点?...
  3. 黑马程序员视频-微信小程序-原生框架——项目搭建
  4. 数据库基础笔试题(附带答案)
  5. linux修改vcf编码格式,VCF乱码终极解决大法
  6. CAD图纸、影像地形、倾斜摄影、矢量数据统统搬入图新地球,一键浏览分析
  7. webpack ——自定义Loader,将i18n英文单词首字母转大写
  8. 软件测试实例:登录功能怎么设计测试用例
  9. 数据科学导引——租车人数预测模型 线性回归模型
  10. 硬盘安装Win10系统教程_Win10官网
  11. 一加8 线刷官方ColorOS尝鲜版遇到的各种问题及解决方案
  12. Vue实现动态路由导航
  13. 实验一:彩色空间转换(YUV2RGB)
  14. 适合公司用的电子邮箱哪家好?企业邮箱最全功能介绍~
  15. 本科课程【java程序设计】实验2 - 类与对象编程练习
  16. IP地址常见分类:A类、B类、C类、D类、E类
  17. [SMOJ220]太空飞行计划
  18. STL_算法(17)_排列组合 next_permutation() perv_permutation()
  19. 4. Python面向对象语法——类的构造函数
  20. modernizr_Modernizr入门

热门文章

  1. 【开篇】STM32F103C8T6 含义、命名规则、GPIO原理以及初始化(参考男神江科协,学习交流用)
  2. 【愚公系列】2021年12月 网络工程-PKI
  3. CDAC单位电容取值
  4. C++常见十六进制数组转换char数组方法
  5. 为企业用户配置专有UPN后缀
  6. 计算机网络的五个功能,计算机网络的基本功能
  7. baocms伪静态_最新Baocms+Niucms整合完整版源码生活o2o程序,商城,活动营销,微信,wap等...
  8. Vue教程_tips
  9. 优秀开源产品推荐:Tpflow工作流引擎
  10. 会议室管理系统jsp和mysql_JSP+Servlet+JDBC+Mysql实现的天才会议管理系统