手写promise

promise使用:

let promise= new Promise(function(resolve, reject) {

        if (...) {

                resolve()

        } else {

                reject()

        }

})

promise.then(res => {}, err => {})

分析:

根据模板来分析:

1. 构造函数Promise传入的参数是一个函数,因此在构造函数中需要执行这个函数,传入的函数有两个参数,分别是resolve()函数和reject()函数,因此Promise内部要有这两个函数;

2. promise的状态一开始是pending状态,成功之后变为resolved状态,失败之后变为rejected状态,因此在构造函数内部先定义一个status,初始值为pending,当执行resolve函数时设置为resolved,当执行reject函数时设置为rejected;

3. resolve 返回成功值, reject 返回失败值,因此构造函数内部需定义两个变量value 和 reason;

4. then方法传入两个参数,分别为成功执行函数和失败执行函数,Promise的原型上添加then方法,在resolved状态下执行成功执行函数,传入value,在rejected状态下执行失败执行函数,传入reason;

实现:

// 构造函数
function Promise(executor) {
	var self = this;
    // promise状态
	self.status = 'pending';
    // 成功返回值
	self.value;
    // 失败返回值
	self.reason;
	function resolve(value) {
		if(self.status === 'pending'){
			self.status = 'resolved';
			self.value = value;
		}		
	},
	function reject(reason) {
		if(self.status === 'pending'){
			self.status = 'rejected';
			self.reason = reason
		}
	}
	executor(resolve,reject)
}
// then方法
Promise.prototype.then = function(onFulfilled,onRejected){
	var self = this;
	if (self.status === 'resolved'){
		onFulfilled(self.value)
	}
	if (self.status === 'rejected'){
		onRejected(self.reason)
	}
}
// catch 方法举一反三

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值