浅析Promise原理
Promise原型对象
在浏览器控制台输入如下代码,可以看到Promise原型对象信息。
var p = new Promise(()=>{});
console.log(p)
Promise原型上有catch
、finally
、then
等方法。同时Promise内部维护了两个属性值status
和value
Promise构造方法
再看Promise的构造方法,如下图
构造函数有all
、allSettled
、finally
、race
、reject
、resolve
等方法。
简单实现
构造函数实现总结:
- 构造函数接受一个函数
executor
,并立即执行; executor
函数接受两个参数,一个是resolve
函数,一个是rejected
函数,用于后续回调执行;promise
对象的then
方法中的第一个参数(函数)是状态变为fulfilled
时的回调。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原理相关推荐
- 浅析bootstrap原理及优缺点
网格系统的实现原理,是通过定义容器大小,平分12份(也有平分成24份或32份,但12份是最常见的),再调整内外边距,最后结合媒体查询,就制作出了强大的响应式网格系统 网格系统的实现原理,是通过定义容器 ...
- 面试题promise原理
面试题Promise原理 在Promise的内部,有一个状态管理器的存在,有三种状态:pending.fulfilled.rejected. (1) promise 对象初始化状态为 pending. ...
- 从零开始,手写完整的Promise原理!
珠峰十年深度沉淀,最具诚意与深度的课程限时免费开放,带你从0到1完美诠释异步编程,并手写一个完整的promise原理! [扫码免费参加,限200人] (名额有限,扫描上方二维码立即参加!) 历史学员 ...
- 手把手带你学会Odoo OWL组件开发(5):浅析OWL原理
[本系列内容直达:] 手把手带你学习Odoo OWL组件开发(1):认识 OWL 手把手带你学会Odoo OWL组件开发(2):OWL的使用 手把手带你学会Odoo OWL组件开发(3):核心内容指南 ...
- 浅析Promise用法
浅析Promise用法 要理解Promise要知道没有Promise的回调地狱 如何插入一段漂亮的代码片 Promise语法与then的用法 所谓Promise,简单说就是一个容器,里面保存着某个未来 ...
- js中promise原理及手动基本实现_V1
前言 这几天面试过程,有个面试官突然跟我抠上了promise的实现原理,虽然有所准备,但是没能清晰地说出其中的原理,所以有点遗憾!!!,但是事已至此,只能默默去查了相关资料深入其中了解一番.因此就有了 ...
- Promise原理详解及实现方式
在异步编程中,许多操作都会放在回调函数(callback)中,有时候需要拿到上一个异步操作的返回值再做第二次请求 比如: asyncOperation(data => {// 处理 `data` ...
- ES6 Promise原理
ES6 Promise原理 一.Promise是什么 二.为什么会有Promise 1.回调地狱 + 异步同步事件调用顺序带来的双重伤害 2.回调事件的分离 三.Promise的三种状态 1.reso ...
- promise原理与async 及 await
promise原理与async 及 await 1.1 Promise是一个构造函数 1.2 Promise优缺点 1.3 async 及 await 1.4 相较于 Promise,async/aw ...
最新文章
- nodejs实践录:windows 10系统nodejs环境搭建
- html 选中变颜色变化,如何防止HTML中的选项中的颜色变化以及选中的元素在html中被选中并失去焦点?...
- 黑马程序员视频-微信小程序-原生框架——项目搭建
- 数据库基础笔试题(附带答案)
- linux修改vcf编码格式,VCF乱码终极解决大法
- CAD图纸、影像地形、倾斜摄影、矢量数据统统搬入图新地球,一键浏览分析
- webpack ——自定义Loader,将i18n英文单词首字母转大写
- 软件测试实例:登录功能怎么设计测试用例
- 数据科学导引——租车人数预测模型 线性回归模型
- 硬盘安装Win10系统教程_Win10官网
- 一加8 线刷官方ColorOS尝鲜版遇到的各种问题及解决方案
- Vue实现动态路由导航
- 实验一:彩色空间转换(YUV2RGB)
- 适合公司用的电子邮箱哪家好?企业邮箱最全功能介绍~
- 本科课程【java程序设计】实验2 - 类与对象编程练习
- IP地址常见分类:A类、B类、C类、D类、E类
- [SMOJ220]太空飞行计划
- STL_算法(17)_排列组合 next_permutation() perv_permutation()
- 4. Python面向对象语法——类的构造函数
- modernizr_Modernizr入门
热门文章
- 【开篇】STM32F103C8T6 含义、命名规则、GPIO原理以及初始化(参考男神江科协,学习交流用)
- 【愚公系列】2021年12月 网络工程-PKI
- CDAC单位电容取值
- C++常见十六进制数组转换char数组方法
- 为企业用户配置专有UPN后缀
- 计算机网络的五个功能,计算机网络的基本功能
- baocms伪静态_最新Baocms+Niucms整合完整版源码生活o2o程序,商城,活动营销,微信,wap等...
- Vue教程_tips
- 优秀开源产品推荐:Tpflow工作流引擎
- 会议室管理系统jsp和mysql_JSP+Servlet+JDBC+Mysql实现的天才会议管理系统