# 前言
看到好多面试题,其中有个问题一直位居高位 -- 手写promise
咱该说不说的,这个没有点金刚钻还真揽不了这瓷器活。
今天就让我们一步一个脚印的走近 Promise
的真相,其实也没想象的那么难
# 大概思路
其实不管是工作中封装组件还是类库,一般都是由简及难,由点到面
手写 Promise
也不例外,无外乎就是:
- 定义整体结构
- Promise 构造函数的实现
- Promise .then() / catch() 的实现
- Promise .resolve() / reject() 的实现
- Promise .all() / race() 的实现
有了大概思路,我们就有了目标和方向,然后就是各个攻破 ~~~
# 定义整体结构
/**
* 自定义 Promise 函数模块
*/
(function name(window) {
/**
* @func Promise 函数模块
* @param excutor 执行器函数(同步执行)
*/
function Promise(excutor){
function resolve(value) {
}
function reject(reason) {
}
try{
excutor(resolve, reject)
}catch(error){
reject(error)
}
}
/**
* @func Promise 原型对象中的 then()
* @param onResolved 成功的回调函数
* @param onRejected 失败的回调函数
* @returns 返回一个新的 Promise 对象
*/
Promise.prototype.then = function (onResolved, onRejected) {
}
/**
* @func Promise 原型对象中的 catch()
* @param onRejected 失败的回调函数
* @returns 返回一个新的 Promise 对象
*/
Promise.prototype.catch = function (onRejected) {
}
/**
* @func Promise 函数对象的 resolve()
* @param value 成功的回调函数
* @returns 返回一个指定结果 value 的成功的 Promise
*/
Promise.resolve = function (value) {
}
/**
* @func Promise 函数对象的 reject()
* @param reason 失败的回调函数
* @returns 返回一个指定结果 reject 的失败的 Promise
*/
Promise.reject = function (reason) {
}
/**
* Peomise 函数对象的 all()
* @param promises 请求数组
* @returns 返回一个 Promise
* @returns 只有 Promise 都成功时才成功,只要有一个失败就失败,并返回失败的 Promise
*/
Promise.all = function (promises) {
}
/**
* Peomise 函数对象的 race()
* @param promises 请求数组
* @returns 返回一个 Promise,其结果由第一个完成的 Promise 决定
*/
Promise.race = function (promises) {
}
// 向外暴露 Promise 函数
window.Promise = Promise;
})(window)
下一篇:Promise 构造函数的实现