自建promise
基本原理
【自建promise】1.通过构造方法生成一个promise对象,但是构造方法中传入的方法不会立即调用
2.通过then给promise对象中的成功方法列表中添加方法,通过catch给promise中的失败方法列表添加方法
3.初始状态为pending,且变为fulfilled或rejected后不会再被改变
4.在添加完所有方法后执行构造函数中添加的方法,仅有构造函数中传入的方法可以修改promise的执行状态,后续then中添加的方法不会有resolve,reject的传参
class PromiseA {
constructor(asyncFunc) {
this.handlerList = []
this.catchList = []
this.state = 'pending'
setTimeout(() => {
asyncFunc(this.resolve.bind(this),this.reject.bind(this))
});
return this
}resolve() {
if (this.state !== 'pending') { // 保证promise状态在改变后不会再被修改
return
}
this.state = 'fulfilled'
this.handlerList.forEach(element => { // 依次运行所有注册在成功调用方法列表中的方法
element()
});
}reject(err) {
if (this.state !== 'pending') { // 保证promise状态在改变后不会再被修改
return
}
this.state = 'rejected'
this.catchList.forEach(element => { // 依次运行所有注册在错误捕获方法列表中的方法
element(err)
})
}then(asyncFunc) {
this.handlerList.push(asyncFunc)
return this
}catch(errFunc) {
this.catchList.push(errFunc)
}
}new PromiseA((resolve, reject) => {
setTimeout(() => resolve(), 3000)
// reject('123')
reject()
})
推荐阅读
- 做一件事情的基本原理是什么()
- dubbo基本认识
- HTML基础--基本概念--跟着李南江学编程
- 7、前端--jQuery简介、基本选择器、基本筛选器、属性选择器、表单选择器、筛选器方法、节点操作、绑定事件
- 一般模型化关系——从模型是什么到如何起作用的基本答案
- canvas(一)基本用法
- 带你了解类型系统以及flow和typescript的基本使用
- 使用Promise对微信小程序wx.request请求方法进行封装
- MySQL数据库的基本操作
- 从如何使用到如何实现一个Promise