实现一个简易Promise

Promise是什么

promise是一个对象,表示一个异步操作的整体完成和返回的值

//怎么实现

promise 接受回调,并且调用,自身带有三种状态,pendding, onFulfilled, onRejected,并且 resolve 这个函数可以让 pendding 状态变成 onFulfilled 状态,同理 reject 函数可以让 pendding 状态变成 onRejected 状态
const PENDING = pending

const RESOLVE = resolve

const REJECT = reject
//定义promise类
class Promise{
//接受new Promise时 立即调用构造函数 接受用户插入的executor(resolve reject)
construtor(executor){
//默认状态
this.status=PENDING;
//成功时数据存储 可能是js值 underfied promise三者之一
this.value=undefied;
//失败原因
this.reason = underfied;
//成功的实例 由用户传入
let resolve = (value)=>{
if(this.status === PENDING){
this.status=RESOLVE;
this.value=value;
}
}
let reject = (reason)=>{
if(this.status === PENDING){
this.status=REJECT;
this.reason=reason;
}
}
//再executor外包裹try catch是为了捕获运行时的错误 以及throw new error()这种非用户主动调用reject时的情况
try{
//立即执行函数 执行器就是executor,
//用户认为成功或者说想调用’成功’方法或者是想将状态置为成功时使用resolve,并传入成功消息
//反之调用reject,并传入失败原因
executor(reject,resolve);
}catch(error){
//用户主动调用reject和promise内executor运行出错都会调用reject。
reject(error)
}
}
//promise自带方法
then(onFullfilled,onReject){
if(this.status === RESOLVED){
onFullfilled(this.value)
}
if(this.status === REJECT){
onReject(this.reason)
}
}
}
//用户调用promise的时候立即执行promise,改变promise的状态,当用户调用then的时候 传入两个状态对应要执行的方法 promise根据当前状态的不同 选择执行resolve或reject
let myPromise = new Promise((resolve,reject)=>{
resolve(‘成功’)
throw new Error(‘异常’)
reject(‘失败’)
})
myPromise.then((data)=>{
console.log(‘resolve’,data)
}.(err)=>{
console.log(‘reject’,err)
}
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值