js手写系列-- promise

码途觅云人
• 阅读 1773

Promise/A+规范

  1. 三种状态 pending || fullfiled(resolved) || rejected
  2. 当处于pending状态的时候,可以转移到fullfiled(resolved)或者rejected状态
  3. 当处于fullfiled(resolved)状态或者rejected状态的时候,就不可变
  • 必须有一个then异步执行方法,then接收2个参数并且必须返回一个promise:
  1. onFullfiled 用来接收promise成功的值
  2. onRejected 用语接收promise失败的原因
  3. promise.prototype.then = function(onFullfiled,onRejected){}

面试够用版

        function myPromise(constructor){
            let self = this;
            self.status = 'pendding';
            self.value = undefined;
            self.reason = undefined;

            function resolve(value){
                if(self.status === 'pendding'){
                    self.value = value;
                    self.status = 'resolved'
                }
            }

            function reject(reason){
                if(self.status === 'pendding'){
                    self.reason = reason;
                    self.status = 'rejected'
                }
            }

            try{
                constructor(resolve,reject)
            }catch(e){
                reject(e)
            }
        }

        myPromise.prototype.then = function(onResolved,onRejected){
            let self = this;
            // switch(self.status){
            //     case 'resolved':
            //         onFullfiled(self.value)
            //         break;
            //     case 'rejected':
            //         onRejected(self.reason)
            //         break;
            //     default:
            // }
            if(self.status === 'resolved'){
                onResolved(self.value)
            }else if(self.status === 'rejected'){
                onRejected(self.reason)
            }else{
                return false
            }
        }

        var p = new myPromise((resolve,reject) => {
            resolve(1)
        })
        p.then((x) => {
            console.log(x)
        })
点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Alex799 Alex799
4年前
Vue进阶(幺肆拐):利用Vue中keep-alive快速实现页面缓存
引入场景有时候我们不希望组件被重新渲染影响使用体验;或者处于性能考虑,避免多次重复渲染降低性能。而是希望组件信息可以缓存下来,维持当前的状态。这时候就可以用到keepalive组件。官网解释:<keepalive包裹动
Chase620 Chase620
4年前
iOS开发:后台运行以及保持程序在后台长时间运行
第一部分1.先说说iOS应用程序5个状态:停止运行应用程序已经终止,或者还未启动。不活动应用程序处于前台但不再接收事件(例如,用户在app处于活动时锁住了设备)。活动app处于“使用中”的状态。后台app不再屏幕上显示,但它仍然执行代码。挂起app仍然驻留内存但不再执行代码。按下Home键时,app从活动状态转入后台,绝大部分app通
Chase620 Chase620
4年前
Promise从入门到拿Offer之手写Promise
1、Promise构造函数的实现Promise构造函数用来声明示例对象,需要传入一个执行器函数。其中包括resolve函数和reject函数,以及几个重要的属性:状态属性、结果属性和回调函数队列。构造函数的基本框架resolve函数用于异步处理成功后调用的函数。其中包括验证对象状态修改次数,修改promise实例对象状态,异步调用成功的回调函数
Wesley13 Wesley13
3年前
java垃圾回收机制
成为垃圾的标准对于非线程对象,当所有的活动线程都不能访问到改对象时候,成为垃圾对于线程对象,除满足以上条件外,还要求线程处于死亡或者还处于新建状态符合条件的几种情况对象设为Null,代码都应该这样写,释放资源应用指向别的对象语句块结束,局部应用消亡Java不用手动管理内存,只是需要程序员管理对象是否变
Stella981 Stella981
3年前
Hibernate映射关系及CRUD操作
Hibernate对象的三种状态的概念及互相转化:1.瞬时状态或临时状态(Transient):用new创建的对象,它没有持久化,没有处于Session中;2.持久状态(Persistent):已经持久化,加入到了Session缓存中。如通过hibernate语句保存的对象;3.三脱管状态或游离状态(Detached):持久化对象
Stella981 Stella981
3年前
JavaScript中Promise 使用、原理以及实现过程
1.什么是Promisepromise是目前JS异步编程的主流解决方案,遵循Promises/A方案。2.Promise原理简析(1)promise本身相当于一个状态机,拥有三种状态pendingfulfilledrejected一个promise对象初始化时
Stella981 Stella981
3年前
DirectX3D设备丢失(lost device)的处理(二)
一个Microsoft?Direct3D?可以处于操作状态或丢失状态。操作状态是设备的正常状态,设备按预期运行并present所有渲染结果。当事件发生时,如全屏应用程序失去键盘输入焦点,设备就转变到丢失状态,这会导致渲染无法进行。丢失状态表现为所有渲染操作的悄然失败,这意味着即使渲染操作失败所有的渲染方法仍可以返回成功码。在这种情况下,IDirect3DD
Stella981 Stella981
3年前
Druid连接管理分析
Druid创建连接的过程    Druid是通过一个创建连接线程来完成连接,如下图所示:    Druid有且只有一个线程来创建连接,为了防止不必要的线程时间片的消耗,其采用了await()/notify()的方式,当其创建了足够的多的连接之后就处于调用await(),使得线程处于blocked状态。当其接收
Wesley13 Wesley13
3年前
Java中线程的状态及其转化
线程状态转化图:!(https://oscimg.oschina.net/oscnet/59b097655f8d5e104255d6444b76ee2cdb2.png)说明:线程总共包括以下5种状态。1、新状态New:该状态也叫新建状态,当线程对象被创建后,线程就进入了新建状态。例如:ThreadthreadnewThr
Stella981 Stella981
3年前
IBM带库故障处理(驱动器down,磁带卡带,重配置)Netbackup
1 磁带库管理1.1 磁带库和驱动器状态查询通过JavaConsole进入DeviceMonitor,从Monitor右侧可看到各个驱动器的状态。TLD,处于正常待命状态。ACTIVE,处于使用中的状态DOWN,处于故障而被关闭的状态,无法使
码途觅云人
码途觅云人
Lv1
期待生活有惊喜,盼望事事有回应。
文章
4
粉丝
0
获赞
0