手写Promise

1、promise的概念

//  Promise es6
// generator
// async await  都需要学promise 
// koa generator 变成了async  await axios   redux-saga
// fetch 

const Promise = require("./14.promise");

// 1.promise 是一种异步流程的控制手段   回调地狱 第一个的输出是第二个的输入
// promise 可以链式调用 
// 2. promise 可以支持多个并发的请求,获取并发请求中的数据
// 3.这个promise可以解决异步的问题,本身不能说promise是异步的。

// promise的关键字 (承诺)  resolve 成功  reject 失败  
// 如果一旦promise 成功了就不能失败,相反是一样的。
// 只有状态是等待的状态时,才可以转化状态

// 事件环机制
// promise 只有一个参数,叫executor,默认new时就会调用
// 每一个promise的实例上都有一个then方法,then方法中有两个参数,一个叫做成功的函数,一个叫做失败的函数
// promise 中发生错误 就会执行失败态,
// promise 不在传递回调函数了 
// promise的then方法是异步的。

let p=new Promise((resolve,reject)=>{   
    // 默认promise中的executor是同步执行的
    console.log(1);
    setTimeout(() => {
        resolve('好的!');
    }, 1000);
})
p.then((value)=>{
    //成功的原因
    console.log(value);
},(err)=>{
    //失败的原因
    console.log(err);
})
console.log(2);

2、手写promise

class Promise {
  constructor(executor) {
    this.status = "pending";
    this.value = undefined;
    this.reason = undefined;
    let resolve = (value) => {
      if (this.status === "pending") {
        this.status = "resolved";
      }
      this.value = value;
    };
    let reject = (reason) => {
      if (this.status === "pending") {
        this.status = "rejected";
      }
      this.reason = reason;
    };
    try {
      executor(resolve, reject);
    } catch (e) {
      reject(e);
    }
  }
  then(onFufilled, onRejected) {
    if (this.status === "resolved") {
      onFufilled(this.value);
    }
    if (this.status == "rejected") {
      onRejected(this.reason);
    }
  }
}
module.exports=Promise;

3、Promise 用法

let Promise=require('./14.promise')

let p=new Promise((resolve,reject)=>{
    resolve('请求成功');
    reject('请求成功');
});
p.then(data=>{
    console.log('成功!'+data);
})

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vues

刚好遇见你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值