- promse是异步状态的封装。
- 大致有三种状态:state: pedding, resolve, reject.
- 参数:fn(resolve, reject); 方法then, catch
const PEDDING = 'pedding'
const RESOLVED = 'resolved'
const REJECTED = 'rejected'
class CustomPromse {
constructor(fn) {
this.state = PEDDING
this.resolveQueue = []
this.rejectQueue = []
this.fn = fn
const resolve = (...res) => {
if (this.state === PEDDING) {
this.state = RESOLVED
this.resolveQueue.forEach(item => item(...res))
}
}
const reject = (...res) => {
if (this.state === PEDDING) {
this.state = REJECTED
this.rejectQueue.forEach(item => item(...res))
}
}
try {
fn(resolve, reject)
} catch (e) {
reject(e)
}
}
then(fn) {
if (this.state === PEDDING) {
this.resolveQueue.push(fn)
}
}
catch(fn) {
this.rejectQueue.push(fn)
}
}