在我们面试前端开发工程师中,我们都逃不过的一个问题就是异步代码的解决方案。而在异步解决中,我们最常见的手段就是用Promise
解决。但只会用Promise
是远远不够的,我们还得更深层次的去了解Promise
实现,下面我们就来实现一个手写简化版的Promise
吧。
(function(window) {// 值执行函数//在promise原型上挂载then方法
myPromise.prototype.then = function(onResolved, onRejected) {} function MyPromise(executor){ // 构建promise函数function resolve(value){} // promise内部的resolve函数function reject(value){}try{ executor(resolve, reject)//参数为实参}catch(error){// 如果promise内代码执行出错,将错误抛出reject(error)}} window.myPromise = myPromise //将promise挂载到window全局对象上
})(window)
首先我们要了解Promise函数中帮我们干了啥事:
这就是promise帮我干的事情,所以我们也就根据它帮我们干的事,我们来搭建promise框架。
在我们使用Promise,我们需要知道的一个很重要的知识点就是,Promise现在是处于什么状态?首先我们要知道Promise有三种状态:
接下来我们再来看看Promise状态的特点:
1.Promise
对象的状态不受外界影响。Promise
对象代表一个异步操作,有三种状态:pending
(进行中)、fulfilled
(已成功)和rejected
(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。2.一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise
对象的状态改变,只有两种可能:从pending
变为fulfilled
和从pending
变为rejected
。在明确完Promise的状态后,我们也就明白了我们需要在resolve
和reject
函数中需要去改变Promise