function SelfPromise(fn) {
this.cbs =[];
var resolve = (res) => {
setTimeout(() => {
this.data = res;
console.log(this.cbs.length);
this.cbs.forEach(cb => {
cb(this.data);
});
})
}
fn(resolve.bind(this));
}
SelfPromise.prototype.then = function(fn) {
let seft = this;
return new SelfPromise((resolve) => {
seft.cbs.push(() => {
const res = fn(seft.data);
if (res instanceof SelfPromise) {
res.then(resolve);
} else {
resolve(res);
}
})
});
}
let testFn = new SelfPromise((resolve) => {
setTimeout(() => {
})
resolve('test001')
});
testFn.then((res) => {
console.log('res01', res);
})
.then((res) => {
console.log('res02', res);
}).then((res) => {
console.log('res03' ,res);
})
function MyPromise() {
}