核心思想即把then后的函数提取出来等待resolve后执行callbacks
    function _Promise(fn, callbacks) {var value = null;var callbacks = callbacks || [];var state = 'pending';var _this = this;//注册所有的回调函数this.then = function (fulfilled, rejected) {//链式promisereturn new _Promise(function (resolv, rejec) {try {if (state == 'pending') {callbacks.push(fulfilled);return;}if (state == 'fulfilled') {var data = fulfilled(value) || value;resolv(data);return;}if (state == 'rejected') {var data = rejected(value);resolv(data);return;}} catch (e) {_this.catch(e);}}, callbacks);}//执行所有的回调函数function resolve(valueNew) {value = valueNew;state = 'fulfilled';execute();}//执行所有的回调函数function reject(valueNew) {value = valueNew;state = 'rejected';execute();}function execute() {//加入延时机制 防止promise里面有同步函数 导致resolve先执行 then还没注册上函数setTimeout(function () {callbacks.forEach(function (cb) {value = cb(value);});}, 0);}this.catch = function (e) {console.error(JSON.stringify(e));}fn(resolve, reject);      }
复制代码

转载于:https://juejin.im/post/5d47b6ee518825052a032173

简单实现promise封装相关推荐

  1. 利用ES6进行Promise封装总结

    原生Promise解析 简介 promise是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和强大. promise简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一 ...

  2. promise ajax 队列,ES6中的promise,从使用promise封装ajax说起

    1为啥要用promise? js是单线程的,理论上所有代码都是同步的,从上到下一行行执行.然而就这样傻傻解析运行js的话,碰到较重的任务时,会阻塞进程,如发送一个用户是否登录验证请求,请求完成响应之前 ...

  3. 深度解析利用ES6进行Promise封装总结

    这篇文章主要介绍了如何利用ES6进行Promise封装总结,文中通过示例代码介绍的非常详细,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. 原生P ...

  4. 小程序promise封装post请求_Promise封装微信小程序的Request请求

    回调地狱一向是影响开发和维护的症结所在,无数个success()的嵌套再嵌套,导致代码层级颇深,盘一次逻辑都要费劲千辛万苦,ES6语法中的Promise,便是专为解决JS中异步请求回调的信任问题而存在 ...

  5. JS 利用promise封装setTimeout So easy

    JS 利用promise封装setTimeout So easy 就是一句代码那么简单 , 实际应用可以结合async / await~ /*** @description:延迟|等待函数* @ret ...

  6. 分享:用promise封装ajax

    用promise封装ajax var ajaxOptions = {url: 'url',method: 'GET',async: true,data: null,dataType: 'text', ...

  7. 简单介绍 ghost封装过程

    简单介绍 ghost封装过程 图片: 描述:1 图片: 描述:2 图片: 描述:3 图片: 描述:4 图片: 描述:5 图片: 描述:8 图片: 描述:11 图片: 描述:12 图片: 描述:13 图 ...

  8. 小程序promise封装post请求_微信小程序promise封装get/post请求

    微信小程序promise封装get/post请求 2020-07-04 20:42:49 微信小程序promise封装get/post请求 叶子兔 2018-10-10 08:55:30  1056  ...

  9. promise是什么?简单分析promise原理

    预备知识 回调函数 高级函数 发布-订阅模式 promise A+ 规范 promise是什么,能干什么 Promise是异步编程的一种解决方案,它可以解决异步回调地狱的问题,防止层层嵌套对程序代码带 ...

最新文章

  1. 为什么大部分人做不了架构师?
  2. 数字经济时代,算力到底有多重要?
  3. sdh管理单元指针_C语言学习|指针的介绍
  4. 分布式,微信小程序 服务器保持登入态解决方案,
  5. 【JavaScript 学习笔记】创建对象
  6. java查看sql视图_SQL Server查看视图定义总结
  7. sob攻略超详细攻略_重庆旅游攻略~超详细攻略大全!必看篇!!
  8. qt下实现文件的拖拽打开
  9. 在网上找来的几个大牛,忽然觉得自己来参加ACM倒也不是一件错误的事情,梦想总是要有的,万一成了呢。
  10. FFmpeg转码流程详解
  11. 与传统的物理服务器对比,云服务器有哪些优势
  12. FFmpeg入门详解之114:DirectShow读取摄像头数据
  13. js判断浏览器类型,判断ie内核,webkit
  14. 大数据文字游戏_移动的大数据指南:千字以内的文章传播率最高
  15. python中fill函数_在figu中旋转matplotlib的fill函数
  16. java 进销存 springmvc SSM crm 项目 系统
  17. HTML 标签 hr hr /
  18. 【PS推荐】Photoshop CC2017安装教程及注意事项【如何修改安装路径】
  19. jjjjjjjjjjjjjj
  20. MYSQL POLARDB 学习系列之 拆解 POLARDB 6 Auto-Scaling 与性能优化 (翻译)

热门文章

  1. Vue.js示例:GitHub提交(watch数据,created钩子,filters过滤); 网格组件(功能:1.检索,2排序);...
  2. 多线程初探:三种方式创建多线程详细示例
  3. k8s nodeport下访问请求未被分发到所有node的排错(转)
  4. python:argparse命令行解析模块详解
  5. Java实现单例模式
  6. 文档型数据库设计模式-如何存储树形数据
  7. Visual C# 2010 实现资源管理器
  8. TSVNCache占用CPU的解决办法
  9. delphi XE2-新的里程碑
  10. Oracle Golden Gate 系列十五 -- GG Trails 说明