diff --git a/js-advanced/implement/promise/index.js b/js-advanced/implement/promise/index.js new file mode 100644 index 0000000..7ade76b --- /dev/null +++ b/js-advanced/implement/promise/index.js @@ -0,0 +1,66 @@ +const Pedding = 'pedding' +const Resolved = 'resolved' +const Rejected = 'rejected' + +class MyPromise { + constructor(executor) { + + this.status = Pedding; + + + const resolve = (data) => { + this.status = Resolved + this.data = data; + return this; + } + + const reject = (data) => { + this.status = Rejected + this.data = data; + return this; + } + + executor(resolve, reject) + } + + then(onFulfilled, onRejected) { + onFulfilled = isFunction(onFulfilled)? onFulfilled: (value) => value; + onRejected = isFunction(onRejected)? onRejected: (value) => { + throw err; + }; + + return new MyPromise((resolve, reject) => { + if(this.status === Resolved) { + onFulfilled(this.data); + }else if(this.status === Rejected) { + onRejected + } + }) + } + + catch() { + + } + + finally() { + + } +} + +function isFunction(fn) { + return fn instanceof Function; +} + + +const abc = new Promise((resolve,reject) => { + resolve(1) +}) + + +abc.then((data) => { + console.log(data); +}) + + + + diff --git a/js-advanced/implement/promise/test.js b/js-advanced/implement/promise/test.js new file mode 100644 index 0000000..11098a7 --- /dev/null +++ b/js-advanced/implement/promise/test.js @@ -0,0 +1,17 @@ +Promise.resolve('good').then((data) => { + console.log(data) +}).then(rst => { + console.log(rst); +}) + +Promise.reject('err').then((data) => { + console.log(data) +},(err) => { + console.log('err: ', err) +}) + +new Promise((resolve, reject) => { + resolve(1); +}).then(data => { + console.log(data); +}) \ No newline at end of file