缘始
上次写那么一个小东西嘛, 平时es6用的真的超级爽, 特别是promise这些, 然后webpack打包一看, mmpIE浏览器全线奔溃, 其他语法还好辣, 我已经引入了babel-transform, 调试找了下问题, 原来是promise这个东西ie直接奔溃了, 当然我也知道那个啥@babel/polyfill, 但是这个弄到项目比我项目还要大, 本来也就写一个小东西了. 所以, 那就自己来写一个promise呗.
始
promise其实也就是一个特殊的对象嘛, 只要我们理清楚它工作的原理就可以了, 我们先来看看es6中promise的结构吧,
1 | new Promise((resolve,reject)=>{ |
其实promise也就是一个传了一个函数进去的构造函数嘛, 在我们构造函数中给用户传入的函数给定两个函数, 代表成功的函数和失败的函数.
then和catch可以看作是promise对象的函数, 他们也接受一个代表回调的函数. 然后再指定的动作后做指定的事儿.
原理其实很简单, 只要理清楚思路, 代码也会很简单的, 现在我们就来用代码实现一下吧:
1 | // 定义Promise的三种状态常量 |
接下来实现我们的promise下的_resolve, _reject方法, 其实也就是先判断当前promise的状态, 然后条用相应的方法
1 | { |
最后就是构造我们promise中的then, catch函数了
1 | { |
煙滅
在这里我们就已经构造好了一个简易的myPromise, 虽然还十分的简陋, 但是也足够我那个小Item使用了.
最后我们在来看看完整代码
1 | // 定义Promise的三种状态常量 |