手写基础版promise

有不对的地方请告知,谢谢!
本文章只是最基础的promise实现方式

先来说说promise 的优缺点
优:解决了异步的嵌套问题啊 也就是回调地狱     解决了异步并发的问题啊
缺:状态一旦改变就不会再改变


这里只处理了同步方法也是最基础,继续.then  时的处理的处理方法
	//首先定义状态 方便后面使用
	const PEDDING = 'PEDDING'
	const RESOLVE = 'RESOLVE'
	const REJECT  = 'REJECT'
	class Promise{
		constructor(executor){
			this.state  = PEDDING //定义状态
			this.successVal = undefined // 用于保存成功的值
			this.errVal = undefined   // 用于保存失败的值
			this.resolvecb = []
			this.rejectcb = []
			let resolve = (value) = >{
				if(this.state === PEDDING  ){ // 用来做限制  resolve  reject 只能调一个
					this.state  = RESOLVE 
					this.successVal = value
					//为pending 时的处理
					this.resolvecb.forEach(fn=>fn())
				}
			}
			let reject = (err) =>{
				if(this.state === PEDDING){
					this.state  = REJECT  
					this.errVal  = err
					this.rejectcb.forEach(fn=>fn())
				}
			}
			try{
				executor(resolve,reject) //默认先上来会执行
			}catch(reason){
				reject(reason)
			}
		}
		then(onResolve,onReject){
			if(this.state === RESOLVE ){
				onResolve(this.successVal)
			}
			if(this.state === RESOLVE){
				onReject(this.errVal )
			}
			if(this.state === PEDDING  ){
				this.resolvecb.push(()={ //此处用切片函数
					onResolve(this.successVal)
				})
				this.rejectcb.push(()=>{
					onReject(this.errVal)
				})
			}
		}
	}

这次更新了对pedding 的处理后续更新对then 的处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值