我的编程空间,编程开发者的网络收藏夹
学习永远不晚

教你一步步实现一个简易promise

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

教你一步步实现一个简易promise

step1 搭建框架

1. 首先我们需要在这里放置一个promise函数本体 后面要在里面添加resolve、reject的执行函数


  function Promise(execotor) {}

2. 原装promise中有then与catch这两个主要的方法,所以我们要给promise的原型挂载then与catch


  Promise.prototype.then = function (onResolved, onRejected) {}
  Promise.prototype.catch = function (onRejected) {}

3. 给promise挂载几个常见方法 resolve、reject、all、race等等

resolve:返回的是一个指定结果的promise对象


  Promise.resolve = function (value) { }

reject:返回失败状态的方法


  Promise.reject = function (value) { }

all:返回一个promise对象,只有当promise都返回的时候,这个状态才算成功


  Promise.all = function (value) { }

race:返回一个promise对象,它的状态是由第一个返回的对象确定的,这个race里面哪个函数先执行完,就直接返回第一个值,其他的继续执行


  Promise.race = function (value) { }

4. 全局声明mypromise


  window.Promise = Promise

5. 建立一个自执行函数 将上述内容全部包裹进去


(function (window) {

})()

step2 填充搭建好了的Promise框架

1.填充function Promise()

(1)let self = this固定一个function内部的this,这个this在后面会发挥很大作用

(2)self.status = 'pending'为Promise函数本体添加一个基础状态‘pending'

(3)self.data = undefined建立一个data源,用来存储resolve传回来的结果

(4)self.callbacks = []建立一个数组,用来将promise中的回调全部保存起来

2.填充function resolve()

(1)        if (self.status !== 'pending') {           return         }判断当前传入进程的状态是否为pending,是就继续下面的操作,不是就直接返回

promise内部有三种状态pending、resolved、rejected,这三种状态都是一种开关变量,如果该状态从pending转为其他状态后将无法改变。

(2)self.status = 'resolved'将该进程的状态改为resolved

(3)self.data = value将value存起来,待会then中的回调会需要使用该数据

(4)放上最重要的执行函数部分,如果sele.data中有待执行的callback函数,立即异步执行它


    if (self.callbacks.length > 0) {
      setTimeout(() => {
        self.callbacks.forEach(callbackObj => {
          callbackObj.onResolved(value)
        })
      }, 0)
    }

3.填充function reject()

(1) 与resolve函数相同,此处简略

4.填充execotor方法

promise主体在执行时如果出错,错误信息被catch捕捉,此时catch会跳至该函数来单独执行一个reject


     try {
       execotor(resolve, reject)
     } catch (error) {
       reject(error)
     }

5.填充.then函数

首先我们要区分传入进程的状态,如果是pending状态就把回调函数存起来,如果不是pending状态就干点什么它应该做的

(1)if (self.status === 'pending')如果当前的状态是pending的话,我们就把它保存起来


    self.callbacks.push({
      onResolved() { onResolved(self.data) },
      onRejected() { onRejected(self.data) }
    })

(2)else if (self.status === 'resolved')如果status的状态是resolved

我们就开开心心的给它执行一下


    setTimeout(() => {
      onResolved(self.data)
    }, 0)

可是有这么一种状态:resolve没有执行,但此时状态却已经改变了,我们就不能执行resolve而改为执行rejected


   else{
     setTimeout(() => {
       onRejecyed(self.data)
     }, 0)
   }

经过了如同怎么把大象塞进冰箱一样“简略”的两步,我们就实现了一个简易的Promise                        

是不是很简单呀,快叫上身边的小伙伴一起来试一试吧!

总结

到此这篇关于实现一个简易promise的文章就介绍到这了,更多相关实现简易promise内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

教你一步步实现一个简易promise

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何实现一个简易promise

这篇文章主要介绍如何实现一个简易promise,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!step1 搭建框架1. 首先我们需要在这里放置一个promise函数本体 后面要在里面添加resolve、reject的执
2023-06-25

一步一步教你写一个jQuery的插件教程(Plugin)

这篇教程介绍了如何编写一个jQuery插件,从了解插件基础,到定义插件方法、调用和使用插件,以及扩展插件功能。通过分步指南和示例插件代码,用户可以一步步学习如何创建自定义jQuery插件,以增强库的功能并轻松实现复杂的交互。
一步一步教你写一个jQuery的插件教程(Plugin)
2024-04-02

一步步教你用Python实现2048小游戏

前言 2048游戏规则:简单的移动方向键让数字叠加,并且获得这些数字每次叠加后的得分,当出现2048这个数字时游戏胜利。同时每次移动方向键时,都会在这个4*4的方格矩阵的空白区域随机产生一个数字2或者4,如果方格被数字填满了,那么就Game
2022-06-04

一步步教你如何创建第一个C#项目

这篇文章主要给大家介绍了关于如何创建第一个C#项目的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
2022-12-08

教你使用Python实现一个简易版Web服务器

这篇文章主要介绍了教你使用Python实现一个简易版Web服务器,本篇文章将通过实现一个简易版的Web服务器,帮助读者理解Python网络编程的基本概念和技巧,需要的朋友可以参考下
2023-05-14

python实现一个简易hashmap

python实现一个简易hashmap,不严谨、有问题之处请多多指出。。近日把数据结构翻出来看看,发现自己这方面的知识很欠缺,算是自己的记录,也希望给正在学习数据结构的老铁们分享,共同学习。。。简单说明原理 python语言中的dict底层
2023-01-31

JavaScript Webpack 入门教程:一步一步构建你的第一个项目

本教程将一步一步引导您入门 JavaScript Webpack,让您能够轻松构建自己的项目。
JavaScript Webpack 入门教程:一步一步构建你的第一个项目
2024-02-24

教你一步步实现Android微信自动抢红包

本文介绍微信自动抢红包的实现方法,主要实现以下几个功能: 1.自动拆开屏幕上出现的红包 2.处于桌面或聊天列表时接收到红包信息时自动进入聊天界面并拆红包 3.日志功能,记录抢红包的详细日志实现原理 1
2022-06-06

一步步教你用Vue.js创建一个组件(附代码示例)

组件(Component)是Vue.js最强大的功能之一,组件可以扩展HTML元素,封装可重用的代码,下面这篇文章主要给大家介绍了关于如何一步步用Vue.js创建一个组件的相关资料,需要的朋友可以参考下
2022-12-14

JavaScript Web Components 入门教程:一步步构建你的第一个组件

JavaScript Web Components作为下一代Web开发标准之一,拥有强大的封装性、可扩展性和跨平台性,可以帮助开发人员创建可重用的自定义元素。本文将带领您一步步构建第一个Web组件,并探索其优势和使用场景。
JavaScript Web Components 入门教程:一步步构建你的第一个组件
2024-02-03

用Python实现一个简易的WebSoc

#coding=utf-8from threading import Threadimport structimport timeimport hashlibimp
2023-01-31

VUE 列表过渡实战教程:一步一步教你掌握动画效果

VUE 列表过渡实战教程将引导您一步一步掌握列表动画效果,从基本过渡到复杂的动画,让您轻松创建动态且引人入胜的列表。
VUE 列表过渡实战教程:一步一步教你掌握动画效果
2024-02-11

ASP MVC实现CRUD功能的详细教程,一步一步带你轻松掌握

。本教程将介绍如何使用ASP MVC框架实现创建、读取、更新和删除(CRUD)操作。
ASP MVC实现CRUD功能的详细教程,一步一步带你轻松掌握
2024-02-24

编程热搜

目录