1、构造函数
myPrmose.js:
class myPrmose{
state = 'pending' //状态,‘pending’,‘fulfilled’,‘rejected’
value = undefined //成功后的值
reason = undefined //失败后的值
resolveCallbacks = [] //pending状态下存储成功回调
rejectedCallbacks = [] //pending状态下存储失败回调
constructor(fn) {
const resolveHander = (value) => {
if (this.state === 'pending') {
this.state = 'fulfilled'
this.value = value
this.resolveCallbacks.forEach(fn => fn(this.value))
}
}
const rejectHander = (season) => {
if (this.state === 'pending') {
this.state = 'rejected'
this.reason = season
this.rejectedCallbacks.forEach(fn => fn(this.reason))
}
}
try {
fn(resolveHander, rejectHander)
} catch (err) {
rejectHander(err)
}
}
then(fn1, fn2) {
//当pending状态下,fn1,fn2,会被存储到callbacks中
}
}
index.html调用:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<script src="myPrmose.js"></script>
<script>
const p1 = new myPrmose((resolve,reject) => {
resolve(200)
reject('错误')
throw new Error('错误')
setTimeout(() => {
resolve(200)
},1000)
})
console.log(p1);
</script>
<body>
</body>
</html>
执行结果: