基本使用:

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类的更多相关文章

  1. dojo/Deferred类和dojo/promise类的使用

    参考博客:https://blog.csdn.net/blog_szhao/article/details/50220181        https://dojotoolkit.org/docume ...

  2. 剖析Promise内部结构,一步一步实现一个完整的、能通过所有Test case的Promise类

    本文写给有一定Promise使用经验的人,如果你还没有使用过Promise,这篇文章可能不适合你,建议先了解Promise的使用 Promise标准解读 1.只有一个then方法,没有catch,ra ...

  3. 也谈Promise

    最新的ES6标准添加有Promise方法,但自己在项目中一直使用jQuery(jQuery自己实现了不标准的Promise),加上es6标准还没有得到普及,也就懒得学习相关资料. 最近手头上的活少了, ...

  4. Promise 原理探究及其简单实现

    可移步 http://donglegend.com/2016/09/11/promise%E5%8E%9F%E7%90%86%E6%8E%A2%E7%A9%B6/ 观看 Promise是个什么玩意,大 ...

  5. Promise小书(长文)

    promise基础 Promise是异步编程的一种解决方案.ES6 Promise的规范来源于Promises/A+社区,它有很多版本的实现. Promise比传统的解决方案(回调函数和事件)更合理和 ...

  6. Promise原理与实现探究的一种思路

    写在前面 这个文章,展现的是一个实现Promise的思路,以及如何发现和处理问题的情境. 从现有的Promise分析 如果我们想要自己实现一个简单的Promise,那现有规范规定的Promise肯定是 ...

  7. ArcGIS API for JavaScript 4.2学习笔记[7] 鹰眼(缩略图的实现及异步处理、Promise、回调函数、监听的笔记)

    文前说明:关于style就是页面的css暂时不做评论,因为官方给的例子的样式实在太简单了,照抄阅读即可. 这篇文章有着大量AJS 4.x版本添加的内容,如监听watch.Promise对象.回调函数. ...

  8. promise原理

      简介 Promise 对象用于延迟(deferred) 计算和异步(asynchronous )计算.一个Promise对象代表着一个还未完成,但预期将来会完成的操作.Promise 对象是一个返 ...

  9. Promise杂记

    更好的阅度体验 前言 API Promise特点 状态跟随 V8中的async await和Promise 实现一个Promise 参考 前言 作为一个前端开发,使用了Promise一年多了,一直以来 ...

随机推荐

  1. 03.从尾到头打印链表 (Java)

    题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 思路 采用递归: 若当前节点不为空,则递归其后继节点,并将当前节点加入list中. 采用数据结构栈实现: 利用栈“后进先出” ...

  2. UEFI和GPT

    好就没用linux了,这几天在win8笔记本上用虚拟机装了下,也准备装到硬盘上和win8双系统使用,发现一些概念已经跟不上时代了. 一个是在虚拟机中装的时候,分配了虚拟硬盘分区时,提示选择分区表类型, ...

  3. python接口自动化:pycharm中import yaml报错问题解决

    一:问题 python3在cmd命令行中已经安装了yaml,且import yaml是成功的,但是pcharm中import yaml还是红色报错 二:分析原因 pycharm和python环境需要分 ...

  4. 关于colab的一些技巧

    1.指定工作文件夹(运行可以相对路径!) # 指定当前的工作文件夹 import os # 此处为google drive中的文件路径,drive为之前指定的工作根目录,要加上 os.chdir(&q ...

  5. vue 引入jQuery

    http://blog.csdn.net/cly153239/article/details/53067433 vue-cli webpack全局引入jquery 首先在package.json里加入 ...

  6. 【React自制全家桶】六、React性能优化(持续更新总结)

    一.通过虚拟DOM来提升性能(自动) 底层讲解见[React自制全家桶]二.分析React的虚拟DOM和Diff算法   二.将多次setState合并为一次执行(自动) 底层讲解见[React自制全 ...

  7. Maven 默认 SpringMVC-servlet.xml 基本配置

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  8. 阶段3 3.SpringMVC·_03.SpringMVC常用注解_2 RequestBody注解

    拿整个请求体的数据

  9. linux之用户,用户组,软件操作

    用户 超级管理员用户 root 0 普通用户 (0-65535) 系统用户:启动系统服务和进程的用户,不可以登陆. (1-999centos7)(1-499centos6) 可登陆用户:能登录系统的用 ...

  10. Python 输出时去掉列表元组外面的方括号与圆括号