实现Promise类
基本使用:
let promise = new Promise((resolve, reject) => {
// do something
if (true) {
resolve('success');
} else {
reject('fail');
}
})
promise.then((res)=> {
console.log(res); // 如果成功输出:'success'
}, (err)=> {
console.log(err); // 如果失败输出:'fail'
})
那么如何自己实现上面的这样一个Promise类呢?
class Promise {
constructor(executor) {
this.status ='pending'; // 初始状态默认设为pending
this.value = undefined;
this.reason = undefined;
let resolve = (value) => {
if(this.status === 'pending') { // 只有状态为pending才能转换状态
this.value = value; // 将传递进来的值赋给value保存
this.status = 'resolved'; // 将状态设置成resolved
}
}
let reject = (reason) => {
if(this.status === 'pending') {
this.reason = reason; // 将传递进来的失败原因赋给reason保存
this.status = 'rejected'; // 将状态设置成rejected
}
}
executor(resolve, reject); // 默认执行executor
}
then(onFulfilled, onRejected) {
if(this.status === 'resolved') {
onFulfilled(this.value); // 执行成功的resolve,并将成功后的值传递过去
}
if(this.status === 'rejected') {
onRejected(this.reason); //执行失败的reject,并将失败的原因传递过去
}
}
}
module.exports = Promise; // 导出Promise
实现Promise类的更多相关文章
- dojo/Deferred类和dojo/promise类的使用
参考博客:https://blog.csdn.net/blog_szhao/article/details/50220181 https://dojotoolkit.org/docume ...
- 剖析Promise内部结构,一步一步实现一个完整的、能通过所有Test case的Promise类
本文写给有一定Promise使用经验的人,如果你还没有使用过Promise,这篇文章可能不适合你,建议先了解Promise的使用 Promise标准解读 1.只有一个then方法,没有catch,ra ...
- 也谈Promise
最新的ES6标准添加有Promise方法,但自己在项目中一直使用jQuery(jQuery自己实现了不标准的Promise),加上es6标准还没有得到普及,也就懒得学习相关资料. 最近手头上的活少了, ...
- Promise 原理探究及其简单实现
可移步 http://donglegend.com/2016/09/11/promise%E5%8E%9F%E7%90%86%E6%8E%A2%E7%A9%B6/ 观看 Promise是个什么玩意,大 ...
- Promise小书(长文)
promise基础 Promise是异步编程的一种解决方案.ES6 Promise的规范来源于Promises/A+社区,它有很多版本的实现. Promise比传统的解决方案(回调函数和事件)更合理和 ...
- Promise原理与实现探究的一种思路
写在前面 这个文章,展现的是一个实现Promise的思路,以及如何发现和处理问题的情境. 从现有的Promise分析 如果我们想要自己实现一个简单的Promise,那现有规范规定的Promise肯定是 ...
- ArcGIS API for JavaScript 4.2学习笔记[7] 鹰眼(缩略图的实现及异步处理、Promise、回调函数、监听的笔记)
文前说明:关于style就是页面的css暂时不做评论,因为官方给的例子的样式实在太简单了,照抄阅读即可. 这篇文章有着大量AJS 4.x版本添加的内容,如监听watch.Promise对象.回调函数. ...
- promise原理
简介 Promise 对象用于延迟(deferred) 计算和异步(asynchronous )计算.一个Promise对象代表着一个还未完成,但预期将来会完成的操作.Promise 对象是一个返 ...
- Promise杂记
更好的阅度体验 前言 API Promise特点 状态跟随 V8中的async await和Promise 实现一个Promise 参考 前言 作为一个前端开发,使用了Promise一年多了,一直以来 ...
随机推荐
- 【软件工程】Alpha冲刺(2/6)
链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 了解了如何根据系统获取的实际情况进行后端任务的调整 网易云音乐推荐算法的分析 ...
- 开始JavaScript的学习了
为何学习? 1. 所有主流浏览器都支持JavaScript. 2. 目前,全世界大部分网页都使用JavaScript. 3. 它可以让网页呈现各种动态效果. 4. 做为一个Web开发师,如果你想提供漂 ...
- 求平面上N点最远两点和最近两点距离
最近两点,二分法 最远两点,凸包+找对踵点
- iOS证书详解--转载
一.成员介绍1. Certification(证书)证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:1) Developer Certification(开发证书)安装在电脑上 ...
- 3、kubeadm初始化Kubernetes集群
同步时间 # ntpdate time.nist.gov k8s集群组成 k8s部署环境 https://kubernetes.io/docs/setup/independent/create-cl ...
- go 基础 变量和常量
package main import "fmt" //全局变量,赋值 var( PI float32 = 3.1415 Count ) //全局变量,无值 var( x stri ...
- H3C 模拟器 防火墙开启Web功能
最近在搞运维的一些事情,由于缺少实体的机器来进行操作,先在模拟器里面进行 环境 windows 10,模拟器 HCL_V2.1.1 防火墙 1 在windows添加虚拟网卡 我的电脑--管理--设备管 ...
- 【ABAP系列】SAP 使用事务码DBCO实现SAP链接外部数据库以及读取例程
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 使用事务码DBCO实现S ...
- 【PP系列】SAP PP模块工作中心主数据维护
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[PP系列]SAP PP模块工作中心主数据维护 ...
- gulp4.0配置
var gulp = require('gulp'); var rename = require('gulp-rename');//重命名 var uglify=require('gulp-uglif ...