<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<script type="text/javascript"> var fn = function(resolve, reject) { setTimeout(function() { if (true) { resolve('成功') } else { reject('失败') } }, 3000) } class AhfPromise { constructor(fn) { this.successList = []; this.failList = []; this.state = 'pending'; fn(this.resolveFn.bind(this), this.rejectFn.bind(this)) } then(successfn, failFn) { if (typeof successfn == "function") { this.successList.push(successfn) } if (typeof failFn == "function") { this.failList.push(failFn) } } catch (failFn) { if (typeof failFn == "function") { this.failList.push(failFn) } } resolveFn(res) { this.state = 'fullfilled' this.successList.forEach(function(item, index) { item(res); }) } rejectFn(res) { this.state = 'rejected' this.failList.forEach(function(item, index) { item(res); }) throw Error("你错了亲") } } var p1 = new AhfPromise(fn) p1.then(res => { console.log('你成功了呢'); console.log(res) }) p1.then(() => { }) p1.catch(res => { console.log('菜鸡,你失败了'); console.log(res) }) </script>
</body>
</html>