From 7ab32c2607b282061182f9121667dcdc226da501 Mon Sep 17 00:00:00 2001 From: Congwei Bai Date: Thu, 18 Aug 2022 21:47:51 +0930 Subject: [PATCH 1/2] toy promise --- index.js | 33 +++++++++++++++++++-------------- index.test.js | 9 ++++++--- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/index.js b/index.js index 59d6c84..0516c2a 100644 --- a/index.js +++ b/index.js @@ -1,41 +1,46 @@ function myPromise(constructor) { let self = this; - self.status = "pending" //定义状态改变前的初始状态 + self.status = 'pending'; //定义状态改变前的初始状态 - self.value = undefined;//定义状态为resolved的时候的状态 + self.value = undefined; //定义状态为resolved的时候的状态 - self.reason = undefined;//定义状态为rejected的时候的状态 + self.reason = undefined; //定义状态为rejected的时候的状态 function resolve(value) { - // TODO resolve如何改变状态及返回结果 + if (self.status === 'pending') { + self.value = value; + self.status = 'fullfilled'; + } } function reject(reason) { - // TODO reject如何改变状态及返回结果 - + if (self.status === 'pending') { + self.reason = String(reason); + self.status = 'rejected'; + } } //捕获构造异常 try { - constructor(resolve, reject); - } catch (e) { - reject(e); - } - } myPromise.prototype.then = function (onFullfilled, onRejected) { - //TODO then如何实现 + if (this.status === 'fullfilled') { + onFullfilled(this.value); + } -} -module.exports = myPromise + if (this.status === 'rejected') { + onRejected(this.reason); + } +}; +module.exports = myPromise; diff --git a/index.test.js b/index.test.js index cbb1027..479ff30 100644 --- a/index.test.js +++ b/index.test.js @@ -1,9 +1,12 @@ const myPromise = require('./index'); +var assert = require('assert'); -var p = new myPromise(function (resolve, reject) { resolve('isOk') }); +var p = new myPromise(function (resolve, reject) { + resolve('isOk'); +}); test('测试primose的then是否成功', () => { expect.assertions(1); - return p.then(data => { + return p.then((data) => { expect(data).toBe('isOk'); }); -}); \ No newline at end of file +}); From 8a77ebe7786d8067e0e09755bab278d42652e0d2 Mon Sep 17 00:00:00 2001 From: Congwei Bai Date: Thu, 18 Aug 2022 21:50:14 +0930 Subject: [PATCH 2/2] revert test --- index.test.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/index.test.js b/index.test.js index 479ff30..cbb1027 100644 --- a/index.test.js +++ b/index.test.js @@ -1,12 +1,9 @@ const myPromise = require('./index'); -var assert = require('assert'); -var p = new myPromise(function (resolve, reject) { - resolve('isOk'); -}); +var p = new myPromise(function (resolve, reject) { resolve('isOk') }); test('测试primose的then是否成功', () => { expect.assertions(1); - return p.then((data) => { + return p.then(data => { expect(data).toBe('isOk'); }); -}); +}); \ No newline at end of file