自定义Promise 简易实现

本文深入探讨了Promise的概念,通过逐步解析和实现一个简易的Promise,帮助读者理解其内部工作原理。从构造函数、resolve和reject方法,到then和catch的处理,逐一解析每个关键步骤,旨在提升对异步编程的理解。
摘要由CSDN通过智能技术生成
/**
  1.promise是一个类,在执行类的时候,需要传递一个执行器进去,执行器会立即执行
  2.promise 有三种状态 成功fulfilled 失败 rejected 等待 pengding
  状态确定后不可修改

  3.resolve及reject是用来改变状态的
  resolve: fulfilled
  reject: rejected

  4. then方法内部判断状态 如果状态是成功,调用成功,若失败,调用失败

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

  6. 增加异步调用

  7. 处理多个then方法调用
  8. 多个then的链式调用
 */

let promise1 = new Promise((resolve,reject)=>{
   
    resolve('成功')
    reject("失败")
})

promise1.then(()=>{
   },()=>{
   

})

const MyPromise = require('./myPromise')

let promise2 = new MyPromise((resolve,reject)=>{
   
    
    setTimeout(()=>{
   
        resolve('成功')
    },2000)
    // reject("失败")
})

promise2.then((value)=>{
   
    console.log(value)
},(err)=>{
   
     console.log(err)
})

promise2.then((value)=>{
   
    console.log(value)
    return 100;
}).then(value=>console.log(value))


const PENDING = 'pending' //等待
const FULFILLED = 'fulflled' //成功
const REJECTED = 'rejected' //成功


class MyPromise{
   
    constructor(executor){
   
        executor(this.resolve,this.reject)
    }
    status = PENDING;
    // 成功的值
    value = undefined;
    // 失败的原因
    reason = undefined;
    successCalback = [];
    failCallback = [];
    resolve = (value) =>{
   
      // 只有pengding状态可以修改status,若不是,阻止向下执行
      if(this.status !== PENDING) return;
      // 修改状态成功
      this.status = FULFILLED;
      // 保存成功之后的值
      this.value = value;

      // 需要判断成功回调是否存在,存在调用
      //   this.successCalback && this.successCalback
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值