手动实现一个简易版的promise

Promise

promise是es6新增的一个对象,promise 对象代表了未来将要发生的事件,用来传递异步操作的消息。
这次我们来实现一个简易版的promise的功能;


// Promise有三种状态,分别对应不同的事件状态,初始状态是pending,一但状态发生了改变就不会再变化,fulfilled代表了成功的状态,rejected代表了失败的状态
const PENDING = 'pendding';
const FULFILLED = 'fulfilled';
const REJECTED = 'rejected';
class Promise_ {
	// 成功的回调、失败回调、成功返回的数据、失败返回的数据
	resolveCallback = null
	rejectCallback = null
	value = null
	reason = null
	constructor(executor) {
		this.state = PENDING
		// 声明的时候需要传入一个函数来初始化
		executor(this.resolve, this.reject)
	}
	resolve = value => {
		// 只判断这一种状态,且改变状态
		if (this.state === PENDING) {
			this.state = FULFILLED;
			this.value = value;
			// 执行成功的回调
			this.resolveCallback && this.resolveCallback(value)
		}
		
	}
	reject = reason => {
		// 同上
		if (this.state === PENDING) {
			this.state = REJECTED;
			this.reason = reason;
			this.rejectCallback && this.rejectCallback(value)
		}
	}
	then(onSuccess, onError) {
		switch(this.state) {
			case FULFILLED:
				onSuccess && onSuccess(this.value);
				break
			case REJECTED:
				onError && onError(this.reason);
				break;
			default:
				this.resolveCallback = onSuccess;
				this.rejectCallback = onError;
		}
		// 考虑到一般都有链式的调用,这里我们不妨把promise_给return出去
		return this
	}
	// 如果需要catch的话
	catch(onError) {
		switch(this.state) {
			case REJECTED:
				onError && onError(this.reason);
				break;
			case PENDING:
				this.rejectCallback = onError;
		}
		return this
	}
}

此时的业务逻辑是 声明一个promise 传入一个异步函数 然后执行then回调 等待异步执行完成后调用resolve/reject。
把代码复制到控制台测试一下 success!!
以上只是实现了一个非常非常简单的promise的一个基本的功能,进阶的话还需要再研究研究!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值