从零手撕Promise,掌握Promise的实现原理(1)之promise基本结构的实现

387 阅读2分钟

「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」。

1. 了解Promise A+规范

Promise的实现需要遵循Promise A+的标准规范,这套规范告诉了我们该如何去实现一个符合标准的Promise,下面是他的官网大家可以去看看。

2.实现Promise的基本结构

  • 首先我们回想一下,我们是如何使用一个Promise的。
    • Promise是一个类,我们需要使用new关键字去调用它,new一个Promise的时候我们需要传递一个executor执行函数,executor函数有两个参数,分别是resolve函数与reject函数。
    • Promise有三个状态,默认是pending状态(我们称其为等待状态),调用resolve函数会使Promsie的状态由pending变为fulfilled(我们称其为成功状态),调用reject函数会使Promsie的状态由pending变为rejected(我们称其为失败状态)。
    • let p = new Promise((resolve, reject) => {
        resolve('成功')
      })
      console.log(p);
      
    • 控制台打印结果: 2.1p.png
  • 实现基本的Promise结构
    • 本次实现Promise的目录结构

      1. p.js用来写我们的事例

      2. promise文件夹下index.js中用来写我们promise的实现,age.txtname.txt是写事例需要用到的文本文件。

      mulujiegou.png

    • 基本结构实现

      1. 我们用class来实现Promise
      2. 我们用变量定义三个状态分别是PENDING、 FULFILLED、 REJECTED,可以防止我们后续写字符串写错。
      3. new Promise的时候我们要传入executor函数,executor函数需要立即执行。
      4. 执行executor的时候我们需要传入resolve函数与reject函数
      5. 每个Promise还有三个属性,state存放该Promise的状态,value存放Promise成功的值,reason存放Promise失败的原因,最后我们将其导出,我们会在p.js中导入,来使用它。
    • promise/index.js

          const PENDING = 'pending'
          const FULFILLED = 'fulfilled'
          const REJECTED = 'rejected'
      
          class Promise{
            constructor(executor){
      
              this.state = PENDING
              this.value = undefined
              this.reason = undefined
      
              const resolve = (value) => {
      
              }
      
              const reject = (reason) => {
      
              }
      
                executor(resolve,reject)
      
            }
      
            then(onFulfilled, onRejected){
      
      
            }
          }
      
          module.exports = Promise
      

后续文章每天会持续完成