• 简单的promise源码


     1 class Promise {
     2   constructor (executor) {
     3     // 控制异步执行的状态
     4     this.pending = "pending"
     5     // 用来保存异步执行的结果
     6     this.data = undefined
     7     // 使用箭头函数 让this指向 当前实例对象
     8     const resolve = val => {
     9       if (this.pending === 'pending'){
    10         this.pending = "fulfilled"  //修改状态
    11         this.data = val   //保存异步执行的结果
    12         console.log(val)
    13       }
    14     }
    15     const reject = val => {
    16       if (this.pending === 'pending') {
    17         this.pending = "rejected" //修改状态
    18         this.data = val //保存异步执行的结果
    19         console.log(val)
    20       }
    21     }
    22 
    23     executor(resolve, reject) //exector是一个执行器,传入resolve和reject方法,进入会立即执行
    24  } 
    25 }
    26
    27 module.exports = Promise

    一、Promise核心逻辑实现

    首先分析其原理

    1. promise就是一个类 在执行类的时候需要传递一个执行器进去,执行器会立即执行

    2. Promise中有三种状态,分别为成功-fulfilled 失败-rejected 等待-pending pending -> fulfilled pending -> rejected 一旦状态确定就不可更改

    3. resolve 和 reject函数是用来更改状态的 resolve:fulfilled reject:rejected

    4. then方法内部做的事情就是判断状态 如果状态是成功,调用成功回调函数 如果状态是失败,就调用失败回调函数 then方法是被定义在原型对象中的

    5. then成功回调有一个参数,表示成功之后的值;then失败回调有一个参数,表示失败后的原因

  • 相关阅读:
    [转载] 论C#与Java之异同
    MultiThread WebRequest : Timeout
    FCL(2) :: CollectionBase & Collection
    msn 81000306 无法登录,解决方法
    接口一个被我忽略的地方接口重定向技术
    <<Clr Via C#>> Key Points (1) (46章)
    FCL(3):: ArrayList & List (1)
    TCP保活机制
    子网划分
    freopen函数
  • 原文地址:https://www.cnblogs.com/ndh074512/p/15306886.html
Copyright © 2020-2023  润新知